У меня есть следующая конфигурация, которая теперь перезаписывает / create_user / check
на /create_user.php?check=true
.
location / {
try_files $uri $uri/ @ext-php;
}
location @ext-php {
rewrite ^(.*)/create_user/check$ $1/create_user.php?check=true last;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Кроме того, я хочу перенаправить пользователей, использующих версию «create_user.php? Check = true», на версию без расширений. Как лучше всего это настроить?
Является ли перезапись в серверном блоке (как показано ниже) хорошим способом сделать это?
rewrite ^(.*)/create_user.php?check=true$ $1/create_user/check redirect;
Обновление: Следующие изменения конфигурации работают: Добавлен блок карты:
map $query_string $updated_path {
"check=true" "check"; }
и изменена перезапись в блоке сервера на:
rewrite ^(.*/create_user).php$ $1/$updated_path? redirect;
Իմ մոտեցումն այսպիսին կլինի այսպես.
try_files $uri $uri/ =404;
location ~ ^(.*)/create_user/check$ {
rewrite ^ $1/create_user.php?check=true last;
}
location ~ ^(.*)/create_user.php$ {
if ($arg_check = "true") {
return 302 $1/create_user/check;
}
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Ընդհանուր առմամբ, ամենալավն է օգտագործել տեղանքի
բլոկներ տարբեր URL- ների համապատասխանեցման համար, ապա կատարել դրանց մեջ ցանկալի գործողություններ
Ես փոխեցի ձեր նախնական վերաշարադրման հրահանգը իմ պատասխանի առաջին տեղադրության
բլոկի վրա: Մենք գրավում ենք URI- ի առաջին մասը $ 1
փոփոխականի մեջ: (Արդյո՞ք իսկապես անհրաժեշտ է որևէ ուղու համապատասխանել նախքան create_user
հատվածը այստեղ):
Ապա, գտնվելու այլ
բլոկում մենք create_user
URL- ին համընկնում ենք: Հետո մենք ստուգում ենք, թե հարցման փաստարկը ստուգում
պարունակում է տողը ճշմարիտ, եթե ունի, մենք 302 վերահղում ենք ուղարկում օգտագործողին:
Չեմ կարծում, որ հնարավոր է խուսափել - ի օգտագործումից, եթե
այստեղ: Այնուամենայնիվ, ես դեռ կարծում եմ, որ սա ավելի արդյունավետ մոտեցում է:
Հիմնական տարբերությունն այստեղ այն է, որ մենք չենք գործադրում վերաշարադրելու
հրահանգը յուրաքանչյուր բացակայող ֆայլի համար:
Այնուամենայնիվ, որպես վերջին կետ: Ես խորհուրդ եմ տալիս ձեր դիմումում կիրառել առջևի հսկիչի օրինակ, որպեսզի բոլոր հայցերն ուղարկվեն index.php
հասցեին, որն այնուհետև հոգ է տանում URL- ների վերլուծության մասին:
Կա սահմանափակում, թե ինչ կարող է անել nginx- ի կողմը, և երբ հասնում ես այդ սահմանը, ամեն դեպքում պետք է վերակառուցես իրերը: