如何在.htaccess中通过正则匹配创建重定向并传递中间变量
错误原因分析
- 正则锚点使用错误:
$是正则的字符串结束符,只能放在整个匹配规则的末尾,原规则里把$放在-2021之前,相当于要求路径结束后再出现-2021,没有任何URL能符合这个匹配逻辑。 - 指令格式错误:Apache的重定向指令是
RewriteRule,301状态码需要放在规则末尾的标志位中,不能直接写在指令后。 .htaccess场景下,RewriteRule默认匹配的路径不带开头的/,不需要额外加前导斜杠。
正确配置
RewriteEngine On RewriteRule ^news-(.*)-2021$ /news-$1-2022 [R=301,L]
规则说明
^表示匹配路径的开头,避免其他前缀的URL被误匹配(.*)会捕获news-和-2021之间的所有内容,赋值给$1变量传递到目标URL$表示匹配路径的结尾,保证只有后缀是-2021的URL才会被重定向[R=301,L]标识这是301永久重定向,且匹配到本条规则后不再执行后续的重定向规则- 原URL携带的查询参数会默认自动传递到新URL,不需要额外配置,如果需要丢弃查询参数,可以在标志位中加
QSD,即[R=301,L,QSD]
注意事项
测试时请先清空浏览器缓存,301永久重定向会被浏览器长期缓存,旧的错误规则可能会在缓存有效期内持续生效,导致新规则看起来不生效。
内容的提问来源于stack exchange,提问作者elJeffe
相关产品推荐
相关产品推荐

