在重定向301规则之后,使用全局重写



去年我们将一个大网站从oldsite.com更改为newsite.com。在此过程中,我们放置了这样工作的全局重写:

RewriteRule ^(.*)$ https://newsite.com/$1 [R=301,L]

它在一年的大部分时间里都效果很好。但是Google在Newsite.com上发生了变化,而Google在Oldsite.com上保留了一些旧唱片。因此,现在当在Google搜索上找到原始URL时,它们会击中oldsite.com/example,并将其重定向到newsite.com/example,但是真正的URL现在是newsite.com/not-example。

我们在Oldsite.com上放置了一些301个重定向,看起来像这样:

redirect 301 /something/ https://newsite.com/new-thing/

我确认,如果我们删除了重写,这些都将起作用。但是,由于我们在旧站点上有3000多个URL,因此我们真的不能仅仅杀死该全球规则。编写/生成3000多个可能会改变的URL也不是理智的路线。

我读到,重定向规则和重写位于两个相互矛盾的模块中,并且它们不会一起工作。因此,我开始将新规则作为重写测试。看起来像这样:

RewriteRule ^/something/ https://newsite.com/new-thing/ [R=301,L] 

我尝试了使用 ^(。)诸如/, ^(。)/theings/and ^/something $之类的东西,以查看我是否可以进行比赛。偶尔会有一段时间,它会将我重定向到https://newsite.com/newsite.com/new-thing/之类的东西。但是通常,这只是遵守该全球规则。

因此,第一个问题是,编写单次REDIRECTRULE的正确方法是什么,这甚至建议吗?(我的印象应用于模式匹配,而不是单个URL)。

第二个问题是,如何使其他模式保持 ^(。*)$覆盖它们?我还读到" L"标志与此有关,但这似乎并没有任何不同。

我真诚地感谢它的帮助,它整天都在嘲笑我。

  1. 使用相同指令的所有规则,即RewriteRule
  2. 在通用规则之前保留特定的规则。

这样也是如此:

RewriteEngine On
# known URI 1
RewriteRule ^/?something(/.*)?$ https://newsite.com/new-thing/ [R=301,L,NC]
# known URI 2
RewriteRule ^/?something-else(/.*)?$ https://newsite.com/new-thing2/ [R=301,L,NC]
# generic rule
RewriteRule ^(.*)$ https://newsite.com/$1 [R=301,L,NE]

最新更新