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