从文件夹重定向中排除URL

时间:2017-10-10 21:55:33

标签: apache .htaccess redirect mod-rewrite

我正在将所有网址从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/

开头的网址一样

1 个答案:

答案 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是多余的。