Я пытаюсь сделать перезапись, чтобы удалить. 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
, расположение ~ \ Блок .php $
должен отличать внешние URL-адреса от внутренней перезаписи. Один из способов добиться этого - протестировать $ request_uri
с блоком if
. Используйте с осторожностью, поскольку внешняя перезапись URL-адресов .php
, скорее всего, приведет к поломке некоторых приложений, особенно при отправке форм POST.