Назад | Перейти на главную страницу

Перезапись 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

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

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

Ваш 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-адреса, вероятно, нарушат работу некоторых приложений, особенно при отправке форм.