nginx重定向循环,从url中删除索引.php

2022-08-30 15:32:49

我想要任何请求,如,做一个301重定向到.http://example.com/whatever/index.phphttp://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/应提供索引.php脚本位于webroot/a/index.php

基本上,我从来不想在地址栏中显示“索引.php”。我有旧的反向链接,我需要重定向到规范网址。


答案 1

很好的问题,解决方案类似于我最近在ServerFault上回答的另一个问题,尽管这里要简单得多,并且您确切地知道自己需要什么。

您在这里想要的是仅在用户显式请求 时执行重定向,但从不重定向任何最终由实际脚本提供的内部请求,如指令所定义的那样。/index.phpindex.phpindex

这应该可以做到这一点,避免循环:

server {
    index index.php;

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

    location / {

        # ...
    }
}

答案 2

试试看

location ~ /*/index.php {
    rewrite ^/(.*)/(.*) http://www.votre_domaine.com/$1 permanent;
}
location /index.php {
    return 301 http://www.example.com/;
}

推荐