Я пытаюсь переписать, чтобы удалить .php из своих URL-адресов, но пока безуспешно. Вот что у меня есть до сих пор, а затем мои результаты с этой конфигурацией ниже.
location ~ \.php$ {
try_files $uri/ @extensionless-php;
include fastcgi_params;
fastcgi_pass hhvm;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache ASPS;
fastcgi_cache_valid 200 60m;
}
location @extensionless-php {
rewrite ^(.*)$ /$1.php last;
}
Это ведет к:
example.com/page1.php переходит на example.com/page1.php и правильно отображает example.com/page1, рендеринг index.php example.com/page1/, рендеринг index.php
Кто-нибудь сталкивался с этим? Это кажется очень обычным делом, но у меня много часов проблем с этим, и я бесконечно искал в Интернете.
Спасибо за любую помощь!
Ваш location ~ \.php$
блок не видит URI типа example.com/page1
поскольку они не соответствуют регулярному выражению.
Вы должны разместить свой try_files $uri/ @extensionless-php;
директиву в другое место - обычно location /
(который увидит все URI Кроме те, которые заканчиваются на .php
).
Попробуйте что-то вроде этого:
location / {
try_files $uri $uri/ @extensionless-php;
}
location ~ \.php$ {
if ($request_uri ~ (.*)\.php$) {
return 301 $1;
}
try_files $uri =404;
include fastcgi_params;
fastcgi_pass hhvm;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache ASPS;
fastcgi_cache_valid 200 60m;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
РЕДАКТИРОВАТЬ: чтобы удалить расширение из URL-адресов, заканчивающихся на .php
, то location ~ \.php$
блок должен отличать представленные извне URL-адреса от внутренней перезаписи. Один из способов добиться этого - протестировать $request_uri
с if
блок. Используйте с осторожностью, т.к. внешнее переписывание .php
URL-адреса, вероятно, нарушат работу некоторых приложений, особенно при отправке форм.