在 nginx 中将对“/index.php”的任何访问重定向到“/”

在 nginx 中将对“/index.php”的任何访问重定向到“/”

正如标题所示,这确实是一个很简单的问题。

我进行了一些谷歌搜索,但我似乎只找到有关如何将每个页面重写为 index.php?theurigiven 等的建议。

我只想要一条规则,这样如果有人不小心去了

http://www.example.com/index.php
http://www.example.com/foo/index.php

它将在他们的地址栏中被重写为

http://www.example.com/
http://www.example.com/foo/

ETC

我尝试了一些简单的正则表达式,但它们似乎不起作用,所以我把它精简为

location /index.php {
    return 301 /;
}

但那似乎也不起作用?

我猜是因为 nginx 内部正在默默地将“/”重新路由到“/index.php”(或者我在“index”指令中指定的任何内容,以便这些文件可以通过“如果我的页面以.php 结尾并且文件存在,则将其发送到 PHP”块传递给我的 php 处理程序……?

答案1

经过一番折腾,我想我已经得出结论,这不是很好在 nginx 指令中可行。它可行,但只能使用 if 语句,所有语句都说如果可能的话要避免使用 if 语句。

因此我可能会选择 PHP 路线:

if (substr($_SERVER["REQUEST_URI"],-9)=='index.php') {
    Header ('Location: '.substr($_SERVER["REQUEST_URI"],0,-9),true,301);
    exit();
}

简单的..?

相关内容