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

回到顶部