愚蠢的nginx重写问题 - infinate循环

时间:2016-04-28 18:07:06

标签: nginx url-rewriting

我对这一个感到非常困惑。它可能是愚蠢的东西,我一整天都想念它!无论如何,我在网站的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;
}

当我去:

..然后它正确发送到:

如果我评论这两个重写规则,重新启动nginx,然后重试...页面加载正常!

谁能看到我哪里出错了?也许我只是在失明!

1 个答案:

答案 0 :(得分:1)

你构建了一个重写循环。

index指令有效地生成内容重写/index.html每当显示带有/的结尾的网址时。

打破循环的一种方法是仅在外部网址包含rewrite时应用index.html规则。变量$request_uri包含外部URL,可以使用if指令进行测试。有关if的信息,请参阅this caution

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;
}