如何通过RewriteRule移除URL中含未知变量的多级目录
解决Rewrite规则不生效的问题
原规则的问题
你写的正则^gallery/(.*)$/(.*)$存在两个核心错误:
$是正则的字符串结束锚点,不能放在URL路径中间,这会导致正则无法匹配gallery/{WILDCARD}/gallery-name这种中间还有路径的URL- 捕获组对应错误,你要保留的是最后一段
gallery-name,但原规则里用了/$1,对应第一个捕获组(也就是{WILDCARD}部分),完全不符合需求
正确的Rewrite规则
把规则改成下面这样即可:
RewriteRule ^gallery/[^/]+/(.*)$ /$1 [L,NC,R=302]
规则说明
^gallery/:匹配URL开头的gallery/部分[^/]+:匹配中间的任意非斜杠字符(也就是你说的{WILDCARD},用[^/]+比.*更精准,避免过度匹配)/(.*)$:匹配最后一段路径(即gallery-name),并把这部分捕获到第一个捕获组$1里[L,NC,R=302]:L表示这是最后一条规则,NC表示忽略大小写,R=302表示临时重定向
如果需要永久重定向(比如SEO需求),把R=302改成R=301即可。
内容的提问来源于stack exchange,提问作者AJ ISM
相关产品推荐
相关产品推荐

