我想将我网页上的所有流量从www重定向到非www。因此,每个发往www.example.com
的请求都将被重定向到example.com
。
这是在我的.htaccess中完成的(取自此question)
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
问题是,我以前在.htaccess文件中没有这个规则,所以如果用户以前使用www.example.com
访问网站,现在缓存似乎阻止重定向到example.com
,而www URL保留在地址栏中。
但是,如果我打开一个私人浏览器窗口或清除网站数据,重定向工作如预期。
我已经在Chrome(88.0.4324.192)和Firefox(86.0)上进行了测试,两种浏览器都显示了相同的行为。操作系统:macOS 10.15.7操作系统
我如何从服务器端的Angular 解决这个问题呢?因为我不能告诉所有用户清除他们的缓存。
复制步骤:
1.清除浏览器中的缓存和历史记录以启动干净会话
1.打开www.example.com
1.将重写规则www添加到.htaccess文件中的非www
1.再次打开www.example.com
(浏览器应该在上次访问的历史记录中有这个地址)。不会重写example.com
。
**EDIT:**可能会发生这种情况,因为浏览器已经缓存了www.example.com
的内容,因此甚至没有请求服务器。但是问题仍然存在。
2条答案
按热度按时间thtygnil1#
如果他们的计算机已经缓存了网站,这将是非常困难的。事实上,不可能强制刷新,因为我假设你没有把它放在你的代码。
你现在可以做的是在你的代码中加入一个规则,强制定期清除缓存,这样,你将来的更新就不会遇到同样的问题。
或者,您也可以完全禁用缓存,这并不完全理想,但取决于您和您的设计
从此链接查找其他语言的其他选项;
另一个过度杀伤的解决方案是;
如果你的网站上有任何东西做数据库检查,结果加载一个新的页面,例如用户会话检查或登录;你可以通过修改他们的数据库记录来利用这一点,这样他们将被强制进入登录页面。这将强制他们在到达那里时重新加载,并且当他们被强制重新加载时,他们的数据被恢复。
这是最后的手段,但如果世界依赖它,当然,否则。放松与第一个解决方案。人们不会永远保持缓存。
正如我在之前的回复中所说,您可以在下一个版本中设置定期缓存,这可以在HTML中简单地完成。
上述两个代码之间的区别在于
public
和private
,private
表示是任何人(public
)还是只有最终用户(private
)可以缓存最多max-age
(以秒为单位的时间)。但是这也可以在其他几种语言中显式地完成。
这里有一些链接,可以帮助您更好地了解它是如何工作的。
des4xlb02#
您可以考虑使用302或307来代替301响应代码,这两种代码用于临时重定向。Link
默认情况下不缓存响应,除非另有说明。