.htaccess动态重定向失效:无法正确捕获id_comunidad值
解决.htaccess重定向捕获组匹配错误的问题
嘿,我一眼就揪出问题所在啦——你搞混了RewriteCond里捕获组的编号顺序!
先给你拆解下当前规则的问题:
你的RewriteCond里定义了三个捕获组,是按出现顺序编号的:
- 第一个
(.*)对应id_pais=后面的值 - 第二个
(.*)对应id_provincia=后面的值 - 第三个
([^&]+)才是你真正想要的id_comunidad=后面的值
你在RewriteRule里用$1,其实取的是第一个捕获组(也就是id_pais的值),如果这个参数为空或者没传,就会出现你看到的空路径//slug;换成%1也不对,因为%N是引用RewriteCond里第N个捕获组,%1还是第一个捕获组的内容,所以才会得到/1/slug(假设id_pais的值是1)。
修正后的规则
把RewriteRule里的$1改成$3就可以了,因为$3对应RewriteCond里第三个捕获组(也就是id_comunidad的值)。另外,建议把规则里的&直接换成&,.htaccess里不需要转义这个符号,可读性更强:
RewriteCond %{QUERY_STRING} ^id_pais=(.*)&id_provincia=(.*)&id_comunidad=([^&]+) RewriteRule ^ https://example.com/comunidades/$3/slug? [R=301,L]
额外注意事项
- 测试阶段建议把
R=301改成R=302,永久重定向会被浏览器缓存,万一规则还有问题,清缓存会很麻烦 - 确保你的服务器已经启用了
mod_rewrite模块 - 把这条规则放在.htaccess文件的最开头,避免被其他Rewrite规则干扰
内容的提问来源于stack exchange,提问作者nature
相关产品推荐
相关产品推荐

