如何使用.htaccess移除URL中两层.php后缀并实现重定向
.htaccess移除多段路径.php后缀配置修复方案
现有代码核心问题
- 规则顺序颠倒:内部无后缀转.php的重写规则放在了带.php跳转无后缀的外部重定向规则之前,会导致带.php的请求先被内部重写,跳转逻辑无法触发
- 重定向规则仅匹配单层级.php文件,没有覆盖路径中存在多段.php后缀的场景,无法实现
products.php/rss_feed.php跳转到products/rss_feed的需求
修正后完整配置
<IfModule mod_rewrite.c> RewriteEngine on # 全局处理所有带.php后缀的地址,递归移除所有路径段的.php后缀 RewriteCond %{THE_REQUEST} \.php [NC] RewriteRule ^(.+?)\.php(/.*)?$ $1$2 [NC,R=301,L] # 首页index.php单独跳转 RewriteRule ^index\.php$ http://localhost/pureherb/ [NC,R=301,L] # 内部重写:无后缀地址映射到对应.php文件,排除真实存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)(/.*)?$ $1.php$2 [NC,L] </IfModule>
规则说明
- 优先执行外部重定向,匹配所有带.php后缀的请求,递归去掉每一段路径的.php后缀,两层.php后缀的地址会直接跳转到全路径无后缀版本
- 调整内部重写规则,支持多层路径映射,无后缀的
products/rss_feed会被内部映射到实际的products.php/rss_feed.php文件,保证访问无后缀地址可以正常加载资源
提示:测试阶段建议将重定向规则中的
R=301改为R=302,避免浏览器缓存永久重定向规则导致调试异常,确认规则生效后再改回R=301。
内容的提问来源于stack exchange,提问作者Ashish_more
相关产品推荐
相关产品推荐

