如何在所有浏览器都遵循的.htaccess中创建临时重定向?

时间:2017-04-14 12:30:22

标签: .htaccess redirect browser-cache rfc

已经提出了这个问题的多种变体,但我似乎找不到令人满意的答案。

我将以下内容添加到我的.htaccess文件

Redirect 302 /test1 /test

然后浏览网站。我被重定向到/ test 然后我删除重定向,然后再次浏览到该网站。在Chrome,Firefox和Internet Explorer(2017-04-14的最新版本)中,浏览器使用缓存重定向,并将我发送到/ test。在Edge上,我得到/ test1。

正如其他问题所述,根据the RFC,这是 kindof 确定:

Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests.

请注意,RFC含义中的“应该”意味着它是建议的,但不是强制性的。所以建议来缓存重定向(因此,转到/ test1),但无论如何都要 ok 来缓存它。我不明白为什么浏览器不遵循这里的RFC建议,......但就是那样。

然后是303重定向:

The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.

我测试了这个。鉴于RFC,此重定向 MUST NOT (如 ever )将被缓存。 Edge和Firefox在这里玩得很好,不要缓存它。 Internet Explorer和Chrome似乎决定直截了当地忽略RFC,并继续发送给/ test。

这些已知的错误是什么? 我误解了RFC吗? 是否有任何方式,以确保我的重定向不会被缓存?

使用RewriteRule的唯一解决方案是什么?浏览器无法缓存目标URL,因为它们从未看到它们,并且往往不会缓存目标位置,因此这对我有用。 (感谢@Olaf Dietsche)

RewriteRule ^test1 /test

(在我的用例中,我想将web.com/file.pdf之类的内容重定向到另一个文件。没有HTML页面我可以添加no-cache参数。用户手动在浏览器中输入此URL )

1 个答案:

答案 0 :(得分:2)

the RFC(2616)声明

  

此文件已被取代。

确切地说,它是RFC 7231,明确指出“已废弃:2616”。在这种情况下,相关部分为303 See Other,尤其是Appendix B. Changes from RFC 2616

  

303(请参阅其他)状态代码的说明已更改   如果给出显式新鲜度信息,则允许它被缓存,   并且已经为针对GET的303响应添加了特定的定义。   (第6.4.4节)

因此在某些情况下,允许缓存303响应。