Я просмотрел десятки других вопросов и ссылок в Интернете - и, по всем моим расчетам, моя установка должна работать, но это не так.
У меня есть установка nginx с php-fpm. Если я пытаюсь получить доступ к файлу .php, он работает правильно, и я получаю правильные результаты. Я получил это в своем файле конфигурации:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Теперь я хочу настроить свое веб-приложение так, чтобы /somedir/file
автоматически выполняет /somdir/file.php
пока все еще отображается /somdir/file
в адресной строке браузера. Поэтому я изменил свою конфигурацию, чтобы она содержала следующее:
location / {
try_files $uri $uri/ $uri.php?query_string
}
это вид работает, то есть сервер обращается к файлу .php. Однако вместо того, чтобы выполнять его с использованием существующего location ~ \.php$
блок выше, он просто выводит исходный код php при загрузке в браузер. Если я добавлю .php вручную к запрошенному URL, то php будет выполнен.
Такое ощущение, что однажды сервер соответствует try_files
к $uri.php
, затем он не выполняет еще один проход в местах, чтобы увидеть, что ему нужно делать с файлами php. Я попытался разместить блок php выше и ниже location /
, но это не имеет значения.
Как я могу запустить php?
Вы пробовали с rewrite
директива? Например:
location / {
try_files $uri $uri/ @extensionless-php;
index index.html index.htm index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
Источник: http://www.tweaktalk.net/60/nginx-remove-php-file-extension-from-url
try_files
всегда выполняется в текущем контексте, поэтому он служит вашим php-скрипты в виде простых файлов - отсутствует текущее местоположение fastcgi_pass
. try_files
зло, потому что вместо прямолинейности он создает сомнительные блоки, избегайте этого.
В то же время регулярное выражение- локации имеют приоритет перед обычными локациями, поэтому при обратном порядке ничего не меняется.
Лично я считаю, что прячется .php
расширения из адресной строки бесполезны, так как они добавляют больше кода в файл конфигурации.