如何配置RewriteRule仅对Parent1下路径按首目录规则实现301重定向
你之前的规则失效的核心原因是:如果是在.htaccess文件中配置重写规则,RewriteRule匹配路径时会自动去除开头的斜杠,你写的^/Parent1/前缀匹配不到任何请求,所以规则无法触发。
针对你的需求:将Parent1目录下任意层级的子资源,重定向到/allparents/下对应的最后一级路径,对应规则分两种场景:
- 规则写在站点根目录的.htaccess文件中
RewriteRule ^Parent1/(?:.*/)?([^/]+)/?$ /allparents/$1 [R=301,NC,L]
- 规则写在Apache主配置的VirtualHost段中
RewriteRule ^/Parent1/(?:.*/)?([^/]+)/?$ /allparents/$1 [R=301,NC,L]
规则说明
- 前缀限定仅匹配Parent1开头的路径,不会影响Parent2等其他目录的正常访问
(?:.*/)?为非捕获组,匹配Parent1之后任意层数的中间目录,不会占用$1的捕获位置([^/]+)捕获路径最后一段的资源名,对应你要保留的Child部分- 末尾的
/?兼容路径带/和不带/的两种访问形式
调试注意
调试规则时建议先将R=301改为R=302临时重定向,避免永久重定向被浏览器缓存导致修改后看不到效果,确认规则符合预期后再改回301即可。
内容的提问来源于stack exchange,提问作者Setkn
相关产品推荐
相关产品推荐

