htaccess如何实现仅匹配指定URL重定向不干扰其余子路径访问
问题原因
你当前使用的Redirect指令默认是前缀匹配模式,只要请求路径的开头与你配置的路径片段匹配就会触发重定向,且会自动把匹配成功后剩余的路径片段拼接到目标URL末尾,这就是子路径被错误重定向的根本原因。
解决方案
方案1:使用RedirectMatch实现精确匹配(配置最简单)
RedirectMatch基于正则表达式做匹配,你可以用正则的起止符限定只匹配完全符合要求的路径,规则如下:
RedirectMatch 302 ^/category/florists/$ /category/florists.html
其中^代表请求路径的开头,$代表请求路径的结尾,只有完全匹配/category/florists/的请求才会触发重定向,所有带后续子路径的URL都不会被该规则影响。
方案2:使用mod_rewrite规则(灵活性更高,适合后续扩展)
如果你的服务已经开启mod_rewrite模块,也可以用RewriteRule实现该需求,后续如果要加其他重定向规则也更方便:
RewriteEngine On RewriteRule ^category/florists/$ /category/florists.html [R=302,L]
参数说明:
R=302指定为临时重定向,如果你需要生效永久重定向,将其改为R=301即可L表示命中该规则后停止匹配后续的重定向规则,避免和其他规则冲突
测试注意事项
修改完.htaccess文件后建议清空浏览器缓存再测试,浏览器会缓存301/302重定向结果,未清缓存可能会看到旧的异常重定向结果。
内容的提问来源于stack exchange,提问作者kool_Coder
相关产品推荐
相关产品推荐

