301'万维网'的噩梦。 我该如何改变?

大概六个月前,我决定最好把我的网站放在裸露的域名上,让我们只说'example.com'。 我做了所有网站告诉我的指示,从www.example.com到example.com添加301redirect

现在,我希望不要使用裸域,并在www.example.com下build立我的网站。 在阅读本网站和网站如yes-www.org的各种问题后,我意识到长期使用“www”会更好。 为我的主要网站。 现在尤其如此,因为网站规模越来越大,必须分散到不同的网站(例如news.example.com,research.example.com,community.example.com等)。 有了新的域名结构,主要内容应该在www.example.com上列出。

问题是,将旧的www.example.com的301redirect移除到example.com,并将example.com中的一个添加到www.example.com将会导致对仍在caching中的站点进行无限循环的redirect!

可悲的是,这是一个大型网站,每天有数以万计的观众,不能以自动化的方式撤消 。

我唯一能想到的就是在一个域名“www1.example.com”上设置我的主网站,从example.comredirect到www1.example.com,并在某种程度上及时迁移回www.example.com? 我怎么能做到这一点,虽然redirect似乎永久 ?

总之,我希望find一种自动化的方式来回到使用www.example.com而不是裸域,example.com,我真的不知道如何能够再次做到这一点。

免责声明:我是http://www.yes-www.org/的作者,我很高兴你喜欢它。

您已经在这里正确地确定了一个严重的问题,即客户端,甚至可能代理caching301响应。 (幸运的是,search引擎很快就会发生变化,所以没什么可担心的。)

在caching中, RFC 2616有这样的说法 :

接收到的状态码为200,203,206,300,301或410的响应可以被高速caching存储,并用于响应随后的请求,服从到期机制,除非高速caching控制指令禁止高速caching。

有趣的是, 浏览器是否实际caching了301条响应 。 无论最终做什么,几乎肯定会有一些用户需要清除浏览器caching。

考虑到这一切,我将如何解决这个问题:

  • 在任何时候,我都会使用第三个子域名,正如我在这里的同事所build议的那样。 我没有看到任何必要的理由,而且你的一部分用户一定会注意到并怀疑是否有什么错误。
  • 我将首先将现有的301redirect从wwwredirect到非wwwredirect到302redirect。 302默认情况下不可caching 。 这个我会离开一段时间,也许30天,让search引擎和你的大多数普通游客看到它。
  • 在那段时间结束的时候,我会改变网站使用www,删除302redirect,并且把301从非wwwredirect到www。

虽然可能总是有一两个用户需要清除caching才能重新访问网站,不pipe用什么方法,数量应该是最小的,因为用户的caching不是无限的,即使他们在此期间不要访问您的网站,他们几乎肯定会访问许多其他网站,由于其年龄和缺乏使用,可能会推迟您的旧301caching。

最好的办法是拥有某种服务器端逻辑,所以当请求进入example.com ,请检查引用者。 如果推荐人是www.example.com那么不要直接将其redirect到www.example.com ,将其发送到其他地方,或者只显示他们的网站,将其发送到www.example.com上的子文件夹或随你。

另外如果你logging这些请求,你可以得到一些很好的统计数据,有多less用户来自你的www ,仍然得到redirect。 最终这个数字应该会相当低。

另外,请记住将这些过期标题添加到这些301中 – 那么您将不会遇到链接到的FireFox错误中描述的问题。

www.example.com -> example.com的redirect更改为www.example.com -> temp.example.com ,当然还要确保temp地址作为网站的别名。

运行几个星期或几个月。 (并且确保在301上的过期标题!)给它足够的时间,直到你认为大多数人的浏览器已经学会了新的redirect到temp.example.com并忘记了旧的到example.com

那时你可以redirectexample.com -> www.example.com ,而不需要创build一个循环。 (除了那些仍然有旧的redirectcaching的人:太糟糕了)。

同时,closuresredirect到temp ,但保持该别名工作一段时间。 当你注意到有很less或没有temp访问,你可以closurestemp