nginx重定向循环,从网址中删除index.php
我想要任何类似的请求http://example.com/whatever/index.php
,将301重定向到http://example.com/whatever/
。
我尝试添加:
rewrite ^(.*/)index.php$ $1 permanent;location / {
index index.php;
}
问题在于,此重写操作是在根URL上运行的,这将导致无限重定向循环。
编辑:
我需要一个一般的解决方案
http://example.com/
应该提供文件 webroot/index.php
http://example.com/index.php
,应该将301重定向到 http://example.com/
http://example.com/a/index.php
应该301重定向到 http://example.com/a/
http://example.com/a/
应该在以下位置提供index.php脚本 webroot/a/index.php
基本上,我永远不想在地址栏中显示“ index.php”。我有旧的反向链接,我需要将其重定向到规范网址。
回答:
很好的问题,我最近在ServerFault上回答了与另一个解决方案类似的解决方案,尽管这里的解决方案要简单得多,而且您确切地知道需要什么。
您想要的是仅在用户显式请求时执行重定向/index.php
,而从不重定向最终由实际index.php
脚本处理的内部请求(如通过index
指令定义)。
应该这样做,避免循环:
server { index index.php;
if ($request_uri ~* "^(.*/)index\.php$") {
return 301 $1;
}
location / {
# ...
}
}
以上是 nginx重定向循环,从网址中删除index.php 的全部内容, 来源链接: utcz.com/qa/402970.html