Re: Как удалить index.php из url

Constantine A. Murenin cnst++ на freebsd.org
Вс Апр 28 22:09:52 UTC 2019


Почитайте ещё раз данное сообщение:

https://forum.nginx.org/read.php?21,232265,283930#msg-283930

Проблема решается в nginx элементарнейшим образом:

index   index.php;
if ($request_uri ~ "^(.*/)index.php$") {    return  301 $1; }

См.
https://stackoverflow.com/questions/21687288/nginx-redirect-loop-remove-index-php-from-url/21813759#21813759

Смысл здесь в разнице между внешними и внутренними перенаправлениями.  При
использовании $uri (например, через location или rewrite), вы ловите
внутреннее (служебное) перенаправление на /index.php при внешнем запросе на
/, и выдаёте внешнее перенаправление опять на /, тогда как клиент и так уже
запрашивал /.  Для правильной работы нужно использовать не $uri, а
$request_uri, и перенаправлять исключительно внешние запросы /index.php.

http://nginx.org/r/$uri/ru
http://nginx.org/r/$request_uri/ru

К.
http://cm.su/

On Sun, 28 Apr 2019 at 04:57, dimademin <nginx-forum на forum.nginx.org> wrote:

> Движок там MODx, связка nginx + php-fpm, схематично конфиг такой
>
> location / {
>     try_files $uri $uri/ @rewrite;
> }
> location @rewrite {
>     rewrite ^/(.*)$ /index.php?q=$1;
> }
> location ~ \.php {
>     ......
>     тут настроено кэширование отдельных страниц сайта
> }
> ну и дальше там еще второстепенные location, статика, закрытые урлы и пр.
>
> обычные урлы разделов, товаров и какие-то доп. типа урл на сортировки
> выглядят примерно так
> http://dom.com/cat1/
> http://dom.com/tovar_blabla/
> http://dom.com/tovar_blabla/?color=red
>
> С приведенным куском конфига все работает. СЕОшники возжелали склеить
> корень
> "/" и "/index.php", то есть что-бы:
> http://dom.com/index.php редиректило(301) на http://dom.com/
>
> Уже не первый день экспериментирую, перепробовал кучу всего и подозреваю
> что
> силами только nginx, это может не получится, как раз по причине
> использования php-fpm. Все попытки это в конфиге nginx приводят к рекурсии.
>
>
> На виртуалке поднял аналогичный конфиг только nginx + apache, через
> htaccess
> это делается без проблем:
>
> RewriteBase /
> RewriteCond /index.php [NC]
> RewriteRule ^(.*)index\.php$ $1 [R=301,L]
>
> Видимо конкретно в моем случае, в роли htaccess, должен выступить скрипт,
> то
> есть этот рерайт наверное нужно делать там.
> Ну у меня просто идеи уже кончились и свои и не свои, может вы свежим
> взглядом что-нить подскажете :)
>
> Вот как-то так, вроде ничего не забыл.
> Спасибо
>
> Posted at Nginx Forum:
> https://forum.nginx.org/read.php?21,232265,283965#msg-283965
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20190428/a3b24ecc/attachment.html>


Подробная информация о списке рассылки nginx-ru