如何修改.htaccess规则适配OLDNAME1/2转NEWNAME两种场景?
.htaccess规则:将多个旧名称重定向至同一新名称
原规则作用
原有规则可将URL中的OLDNAME替换为NEWNAME,同时自动移除URL末尾可能存在的-2字符串:
RewriteRule ^(index\.php/)?OLDNAME/(.+?)(?:-2)?/?$ /NEWNAME/$2 [L,NC,R=302,NE]
需求
需要将OLDNAME1和OLDNAME2两个旧路径,统一重定向到同一个NEWNAME路径下。
修正后的可用规则
你尝试的规则逻辑方向正确,可能是正则匹配细节导致失效,试试以下规则:
通用适配版
RewriteRule ^(index\.php/)?(OLDNAME1|OLDNAME2)/(.*?)(?:-2)?/?$ /NEWNAME/$2 [L,NC,R=302,NE]
严格匹配版(推荐)
若要避免匹配不必要的特殊字符,可使用更精准的版本:
RewriteRule ^(index\.php/)?(OLDNAME1|OLDNAME2)/([^/-]+)(?:-2)?/?$ /NEWNAME/$2 [L,NC,R=302,NE]
规则细节解释
(OLDNAME1|OLDNAME2):精准匹配两个旧名称中的任意一个([^/-]+):仅捕获/和-之外的字符,确保目标路径部分不会包含-2相关内容,避免匹配混乱(?:-2)?/?$:可选匹配URL末尾的-2和斜杠,这部分不会被捕获到重定向路径中- 标记说明:
L表示执行完此规则后停止后续规则处理;NC忽略URL大小写;R=302为临时重定向(需永久重定向可改为R=301);NE确保重定向后的URL不会被二次编码
内容的提问来源于stack exchange,提问作者jlc
相关产品推荐
相关产品推荐

