Nginx: Перенаправление. php запрашивает версию без расширения

У меня есть следующая конфигурация, которая теперь перезаписывает / 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;
0
задан 3 May 2017 в 12:29
1 ответ

Իմ մոտեցումն այսպիսին կլինի այսպես.

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- ի կողմը, և երբ հասնում ես այդ սահմանը, ամեն դեպքում պետք է վերակառուցես իրերը:

1
ответ дан 4 December 2019 в 16:16

Теги

Похожие вопросы