如何在所有浏览器都遵守的 .htaccess 中创建临时重定向?
How can I create a temporary Redirect in .htaccess that all browsers adhere to?
有人问过这个问题的多种变体,但我似乎找不到满意的答案。
我将以下内容添加到我的 .htaccess 文件中
Redirect 302 /test1 /test
然后浏览到该网站。我被重定向到 /test.
然后我删除了重定向,并再次浏览到该网站。在 Chrome、Firefox 和 Internet Explorer(2017-04-14 的最新版本)中,浏览器使用缓存重定向,并将我发送到 /test。在 Edge 上,我得到 /test1.
如其他问题所述,这是 kindof 好吧,根据 the RFC:
Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests.
请注意,RFC 术语中的 "SHOULD" 表示建议,但不是强制性的。因此,建议 不要 缓存重定向(并因此转到 /test1),但无论如何 可以 缓存它。我不明白为什么浏览器不遵循此处的 RFC 建议,...但就是这样。
然后是303重定向:
The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.
我已经测试过了。根据 RFC,此重定向 绝不能 (如 ever)被缓存。 Edge 和 Firefox 在这里玩得很好,不要缓存它。 Internet Explorer 和 Chrome 似乎决定直接忽略此处的 RFC,并继续将我发送到 /test。
这些是已知错误吗?
我是否误解了 RFC?
有没有 any 方法来确保我的重定向不被缓存?
是使用 RewriteRule 的唯一解决方案吗?浏览器无法将目标 URL 缓存在那里,因为它们永远看不到它们,并且往往不会缓存目标位置,所以这对我有用。 (感谢@Olaf Dietsche)
RewriteRule ^test1 /test
(在我的用例中,我想将 website.com/file.pdf 之类的内容重定向到另一个文件。没有 HTML 页面可以添加 no-cache 参数。用户在浏览器中手动输入 URL)
the RFC (2616) 个州
This document has been superseded.
准确的说是RFC 7231, which explicitly states "Obsoletes: 2616". And in this case the relevant sections are 303 See Other and especially Appendix B. Changes from RFC 2616
The description of the 303 (See Other) status code has been changed
to allow it to be cached if explicit freshness information is given,
and a specific definition has been added for a 303 response to GET.
(Section 6.4.4)
因此在某些情况下,允许缓存 303 响应。
有人问过这个问题的多种变体,但我似乎找不到满意的答案。
我将以下内容添加到我的 .htaccess 文件中
Redirect 302 /test1 /test
然后浏览到该网站。我被重定向到 /test.
然后我删除了重定向,并再次浏览到该网站。在 Chrome、Firefox 和 Internet Explorer(2017-04-14 的最新版本)中,浏览器使用缓存重定向,并将我发送到 /test。在 Edge 上,我得到 /test1.
如其他问题所述,这是 kindof 好吧,根据 the RFC:
Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests.
请注意,RFC 术语中的 "SHOULD" 表示建议,但不是强制性的。因此,建议 不要 缓存重定向(并因此转到 /test1),但无论如何 可以 缓存它。我不明白为什么浏览器不遵循此处的 RFC 建议,...但就是这样。
然后是303重定向:
The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.
我已经测试过了。根据 RFC,此重定向 绝不能 (如 ever)被缓存。 Edge 和 Firefox 在这里玩得很好,不要缓存它。 Internet Explorer 和 Chrome 似乎决定直接忽略此处的 RFC,并继续将我发送到 /test。
这些是已知错误吗?
我是否误解了 RFC?
有没有 any 方法来确保我的重定向不被缓存?
是使用 RewriteRule 的唯一解决方案吗?浏览器无法将目标 URL 缓存在那里,因为它们永远看不到它们,并且往往不会缓存目标位置,所以这对我有用。 (感谢@Olaf Dietsche)
RewriteRule ^test1 /test
(在我的用例中,我想将 website.com/file.pdf 之类的内容重定向到另一个文件。没有 HTML 页面可以添加 no-cache 参数。用户在浏览器中手动输入 URL)
the RFC (2616) 个州
This document has been superseded.
准确的说是RFC 7231, which explicitly states "Obsoletes: 2616". And in this case the relevant sections are 303 See Other and especially Appendix B. Changes from RFC 2616
The description of the 303 (See Other) status code has been changed to allow it to be cached if explicit freshness information is given, and a specific definition has been added for a 303 response to GET. (Section 6.4.4)
因此在某些情况下,允许缓存 303 响应。