如何通过.htaccess移除URL任意位置的index.php/并实现重定向
.htaccess移除任意路径下index.php/片段的规则修改方案
原有规则失效原因
你之前写的规则RewriteRule ^index.php/(.*) /$1 [R=301,L]中,模式开头的^限定了只能匹配站点根目录下开头为index.php/的路径,子目录下出现的index.php/无法命中,所以只能处理第一个示例场景。
可用的完整规则
RewriteEngine on RewriteBase / # 全局移除所有路径中的index.php片段 RewriteRule ^(.*?)index.php(/.*)?$ /$1$2 [R=301,L,NC]
规则说明
^(.*?):非贪婪匹配index.php之前的所有路径前缀,支持根目录、任意层级子目录的场景(/.*)?$:问号表示该部分可选,既可以匹配index.php后带路径片段的场景,也可以匹配单独访问index.php的场景NC标志:忽略大小写,避免Index.php这类大小写变体无法匹配- 重定向目标
/$1$2:拼接路径前缀和后续路径片段,自动去掉中间的index.php
效果验证
所有示例URL重定向结果如下:
example.com/index.php/apple→example.com/appleexample.com/fruits/index.php/apple→example.com/fruits/appleexample.com/fruits/apple/index.php/ripen→example.com/fruits/apple/ripenexample.com/index.php→example.com/
注意:修改规则后请清除浏览器缓存再测试,301永久重定向会被浏览器默认缓存,旧的重定向规则可能会影响测试结果。
内容的提问来源于stack exchange,提问作者Anonymous Girl
相关产品推荐
相关产品推荐

