大约六个月前,我决定最好将我的网站放在裸域名上,就说“example.com”。我按照所有网站的说明操作,从 www.example.com 到 example.com 添加 301 重定向。
现在我希望停止使用裸域名,将我的网站建立在 www.example.com 下。在阅读了此网站和 yes-www.org 等网站上的各种问题后,我意识到从长远来看,将“www.”用作我的主要网站会更好。现在尤其如此,因为网站越来越大,必须分成几个单独的网站(例如 news.example.com、research.example.com、community.example.com 等)。在新的域名结构下,主要内容应列在 www.example.com 上。
问题是,删除从 www.example.com 到 example.com 的旧 301 重定向,并添加从 example.com 到 www.example.com 的重定向,将导致那些缓存中仍有该网站的用户陷入无限的重定向循环!
可悲的是,这是一个很大的网站,每天有数万名访问者并且无法自动撤销。
我能想到的唯一办法就是在域名“www1.example.com”上设置我的主要网站,从 example.com 重定向到 www1.example.com,然后以某种方式及时迁移回 www.example.com?我该怎么做呢?重定向确实看起来是永久的?
总之,我希望找到一种自动化的方法来重新使用 www.example.com 而不是裸域名 example.com,而且我真的不知道如何再次做到这一点。
答案1
免责声明:我是http://www.yes-www.org/我很高兴你喜欢它。
您正确地指出了此处的一个严重问题,即客户端甚至可能是代理缓存 301 响应。(幸运的是,搜索引擎会很快发现任何变化,因此无需担心。)
关于缓存,RFC 2616 有这样的说法:
收到的状态代码为 200、203、206、300、301 或 410 的响应可能会被缓存存储并用于回复后续请求,但须遵守过期机制,除非缓存控制指令禁止缓存。
有趣的是,浏览器是否缓存 301 响应各不相同。无论您最终做什么,几乎肯定会有一些用户需要清除其浏览器缓存。
考虑到所有这些,我将这样解决这个问题:
- 我绝不会像我的同事建议的那样使用第三个子域名。我认为没有必要这样做,而且您的部分用户肯定会注意到并怀疑是否出了问题。
- 我首先要将现有的 301 重定向从 www 更改为非 www,再更改为 302 重定向。302 默认不可缓存。我会将此保留一段时间,大概 30 天,以便搜索引擎和大多数常规访问者能够看到它。
- 在那段时间结束时,我会将网站更改为使用 www,删除 302 重定向,并将 301 重定向从非 www 重定向到 www。
虽然无论你使用什么方法,总会有一两个用户需要清除缓存才能重新获得对网站的访问权限,但这个数字应该是最小的,因为用户的缓存不是无限的,即使他们在此期间不访问你的网站,他们也几乎肯定会访问许多其他网站,而这些网站可能会因为你的旧 301 缓存太旧或很少使用而将其从缓存中挤出。
答案2
最好的办法是使用某种服务器端逻辑,这样当请求进入时example.com
,请检查引荐来源。如果引荐来源是,www.example.com
则不要直接重定向回www.example.com
,而是将其发送到其他地方,或者只向他们显示网站,将其发送到子文件夹www.example.com
或任何其他位置。
此外,如果您记录这些请求,您可以获得一些关于有多少用户来自您的网站www
并且仍然获得重定向的良好统计数据。最终,该数字应该会下降到相当低的水平。
另外,请记住将您的到期标头添加到这些 301 - 这样您就不会遇到您链接到的 FireFox 错误中描述的问题。
答案3
www.example.com -> example.com
将的重定向更改为www.example.com -> temp.example.com
,当然还要确保该temp
地址可以作为网站的别名。
让它运行几个星期或几个月。(并确保 301 上的标头过期!)给它足够的时间,直到您认为大多数人的浏览器都学会了新的重定向到 ,temp.example.com
并忘记了旧的重定向到example.com
。
那时你可以重定向example.com -> www.example.com
,而不会产生循环。(除了那些仍然有旧重定向缓存的人:太糟糕了)。
同时,关闭对 的重定向temp
,但让该别名继续工作一段时间。当您注意到 的访问很少或没有访问时temp
,您可以关闭temp
。