2015-10-06 2 views
0

Я в настоящее время использую переписывание для приема запросов на файлы без включения расширения .php, однако я не могу узнать, как получить запросы с .php либо в качестве отказа, либо перенаправлен на дружественную версию.nginx redirect .php URI для дружественного коллеги

Например, это то, что я хочу сделать: /contact.php Перенаправить/контакта /contact.php (/contact.php существует, но доступны только через/контакт) приведет к ошибке 403

Текущая конфигурация:

location/{ 
try_files $uri $uri/ @extensionless-php; 
index index.php; 
} 

location ~ .php { 
try_files $uri =404; 
fastcgi_pass backend; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
include fastcgi_params; 
} 

location @extensionless-php { 
rewrite ^(.*)$ $1.php last; 
} 
+0

Привет, хотя я понимаю, что вы хотите перенаправить свои php-файлы, php не задействован или не связан для достижения желаемой функциональности, пожалуйста, удалите тег php, поскольку это не имеет значения :) (Или обновите свой вопрос содержать что-то связанное с php) – Epodax

ответ

0

При условии, что у вас есть уже работает, я думаю, что вы ищете эта часть:

if ($request_uri ~ ^/(.*)\.php$) { return 301 /$1; } 

Или, если вы используете параметры запроса, тоже:

if ($request_uri ~ ^/([^?]*)\.php($|\?)) { return 301 /$1?$args; } 

Вы должны поместить его в своем \.php$ месте (вы должны переименовать ваш настоящий .php). Поверьте мне, это НЕ будет генерировать бесконечный цикл!

Дополнительные разъяснения были предоставлены в https://serverfault.com/questions/568569/nginx-url-rewrite-rule/568902#568902.

+0

также ответил на http://stackoverflow.com/a/32966140/1122270 – cnst