Перезапись Nginx для удаления .php из файлов не имеет никакого эффекта, кроме перенаправления на домашнюю страницу

Я пытаюсь сделать перезапись, чтобы удалить. 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

Кто-нибудь сталкивался с этим? Это кажется очень обычным делом, но у меня много часов проблем с этим, и я бесконечно искал в Интернете.

Спасибо за любую помощь!

1
задан 4 March 2016 в 18:30
1 ответ

Ваш блок 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.

0
ответ дан 4 December 2019 в 06:34

Теги

Похожие вопросы