我正在将所有网址从www.example.com/forums
重定向到www.example.com/blog/
。
所以我在.htaccess
中制定了这条规则:
RewriteRule ^forums blog/$1 [L,R=301]
问题是,我想要排除一些也以forums/
开头的网址,并将其重定向到/blog
以外的特定网址。
例如,forums/8/some-made-up-word-here-1681
到/studies/some-made-up-studies
。
现在,它重定向到/blog
,就像所有以forum/
答案 0 :(得分:1)
在更一般的规则之前,您只需要首先包含更具体的重定向。例如:
RewriteEngine On
# Specific redirects
RewriteRule ^forums/8/some-made-up-word-here-1681 /studies/some-made-up-studies [R,L]
# Redirect all other URLs that start /forums
RewriteRule ^forums/?(.*) /blog/$1 [R,L]
我还修改了您现有的指令,将/forums/<something>
重定向到/blog/<something>
,我认为这可能是最初的意图,因为您在中使用了$1
反向引用替换,但在RewriteRule
模式中没有捕获组。您的原始指令会将/forums/<something>
重定向到/blog/
。
我还在替换中包含了一个斜杠前缀。这是重定向所必需的,但您可能已经设置了RewriteBase
,在这种情况下您不需要这样做。
在测试之前,您需要清除浏览器缓存,因为早期的全部301将被浏览器缓存。因此,使用临时302进行测试通常更容易,以避免缓存问题。只有在确认上述临时重定向符合预期后,才能将上述临时重定向更改为301。
更新:要将所有启动/forums
的网址重定向到/blog/
,而不复制网址的其余部分,请将最后一条指令更改为:
# Redirect all other URLs that start /forums
RewriteRule ^forums /blog/ [R,L]
基本上,原始指令中的$1
是多余的。