Я пытаюсь заставить Nginx обрабатывать файлы php без расширения (т. Е. Обрабатывать http://localhost/sample так же, как и обрабатывать http://localhost/sample.php).Nginx & Обработка файлов без расширения
Это мой сайт конфигурации:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /var/www;
index index.html index.php;
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location/{
try_files $uri $uri/ $uri.html @extensionless =404;
}
location @extensionless {
rewrite ^(.*)$ $1.php last;
}
}
Насколько я знаю, что это следует сделать трюк. Однако - нет. Попытка http://localhost/sample просто заводит меня на 404 страницу (тогда как http://localhost/sample.php отлично работает).
При включении отладки, я вижу следующее в журналах:
2015/07/19 15:37:00 [debug] 4783#0: *1 http script var: "/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "/sample" "/var/www/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 http script var: "/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use dir: "/sample" "/var/www/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 http script var: "/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 http script copy: ".html"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "/sample.html" "/var/www/sample.html"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "@extensionless" "/var/[email protected]"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "=404" "/var/www=404"
Что странно. Это в основном выглядит как @extensionless рассматривается как простое имя файла (вместо места, ведущего к переписыванию URL-адреса).
Что мне не хватает? :) Спасибо!
Связанный: http://stackoverflow.com/a/32966140/1122270 – cnst
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/Лучше не использовать IF и REWRITE , Также лучше сделать 301 переадресацию вместо 302 в этом случае (браузер запомнит это). Посмотрите альтернативный ответ ниже. –
@ Юджин Захаренко, вы ошибаетесь на обоих счетах. Что действительно зло - это 301 переадресация, потому что, как вы указываете, они кэшируются браузером; что вы опускаете, так это то, что они кэшируются навсегда, что приводит к различным видам поведения. – cnst