Глупая проблема перезаписи nginx - бесконечный цикл

Я совершенно сбит с толку этим. Это, вероятно, что-то глупое, и я скучаю по нему после долгого дня! Во всяком случае, у меня есть эта настройка правила перезаписи в моей конфигурации nginx для сайта:

location / {
    root   /srv/www/site.co.uk/www;
    index  index.html index.htm index.php;

    rewrite ^/(.*)/index.html$ http://site.co.uk/$1/ permanent;
    rewrite ^/index.html$ http://site.co.uk/ permanent;
}

Когда я иду в:

.. затем он правильно отправляет:

Если я закомментирую эти 2 правила перезаписи, перезапущу nginx, затем повторю попытку... страница загружается нормально!

Может ли кто-нибудь увидеть, где я ошибаюсь? Может я просто слепой!


person Andrew Newby    schedule 28.04.2016    source источник
comment
Не понятно, в чем у вас проблема? Когда вы видите бесконечный цикл?   -  person Joshua DeWald    schedule 28.04.2016


Ответы (1)


Вы построили цикл перезаписи.

Директива index эффективно генерирует внутреннюю перезапись на /index.html всякий раз, когда представлен URL-адрес с конечным /.

Один из способов разорвать цикл — применять правила rewrite только тогда, когда внешний URL-адрес содержит index.html. Переменная $request_uri содержит внешний URL-адрес и может быть протестирована с помощью директивы if. См. это предостережение относительно if.

if ($request_uri ~* "/index\.html(?|$)") {
    rewrite ^(.*/)index\.html$ $scheme://$server_name$1 permanent;
}
location / {
    root   /srv/www/site.co.uk/www;
    index  index.html index.htm index.php;
}
person Richard Smith    schedule 28.04.2016