使用URL Rewriting移除URL子路径不生效且其他站点URL无法访问求助
mod_rewrite 单URL重写故障排查
问题根源
你的重写规则存在两处核心错误,导致全局URL被劫持:
- 跳转规则逻辑错误:原规则中匹配到旧URL后直接跳转到
/%1也就是/page1.php,完全没有匹配你需要的/customPage目标路径,不符合需求。 - 全局转发规则范围过宽:最后一条规则
RewriteRule (?!^FOF/news/page/)^(.*)$ /FOF/news/page/$1 [L,NC](你原规则中L?NC为语法错误,应为逗号分隔)会将所有不在FOF/news/page路径下、且不是真实存在的文件的请求,全部转发到FOF/news/page目录下,直接导致站点首页、其他目录的请求全部被劫持,无法正常访问。
修复后的规则
仅针对你需要的单个特定URL做重写,完全不会影响其他页面访问:
Options +FollowSymlinks RewriteBase / RewriteEngine on # 旧URL 301永久跳转到新的美观URL RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+FOF/news/page/page1\.php\s [NC] RewriteRule ^ /customPage? [R=301,L] # 内部将新URL映射到实际的php文件,地址栏保持新URL不变 RewriteRule ^customPage$ /FOF/news/page/page1.php [L,NC]
注意事项
测试前请先清除浏览器缓存,301永久重定向会被浏览器默认缓存,不清缓存会导致旧规则残留影响测试结果。
内容的提问来源于stack exchange,提问作者user1887842
相关产品推荐
相关产品推荐

