mod_rewrite,重定向并设置cookie,防止重定向循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mod_rewrite,重定向并设置cookie,防止重定向循环相关的知识,希望对你有一定的参考价值。
我现在被困在这里几个小时...任何帮助将不胜感激!
我需要做什么:
有一个应用需要“保护”。这意味着我需要显示一个“免责声明”页面,它不是受保护应用程序本身的一部分,而是在同一个域/服务器下。此免责声明页面需要每8小时向每位访客显示。
我的理念:
- 在Apache中,在每个请求中,检查是否存在“截获”的特定cookie。
- 如果有cookie,只需处理请求的URL而不做任何更改。
- 如果没有cookie,并且网址不是catch.html,则重定向到/catch.html?intercepted_url={requerst_uri_with_params}。在同一步骤中,设置cookie。
- 浏览器将设置cookie,按照重定向并加载catch.html(cookie已经存在),用户将在此页面上看到免责声明。
- 在catch.html上,使用javascript,cookie“截获”将更新为8小时的生命周期
- 在catch.html上,使用JavaScript,将呈现一个链接,指向截获的URL。
- 用户将单击创建的链接并向先前截获的请求发出新请求
- 每:1
到目前为止我尝试了什么:
Apache配置:
# Exclude the catch destination in order to prevent a redirect loop
RewriteCond %{REQUEST_URI} !/catch.html
# Check if the cookie "intercepted" is missing
RewriteCond %{HTTP_COOKIE} !intercepted
# Redirect and append the original url as request parameter, preserving params, and setting the cookie
RewriteRule ^(.*)$ /catch.html?intercepted_url=$1 [QSA,R=301,CO=intercepted:TRUE:%{HTTP_HOST}]
目前的结果:
- 打开http://local.example.com/foo/bar/baz.html?a=b&x=z&1=2会导致重定向,正如预期的那样,好的
- 现在应该通过重试第一个网址,因为设置了cookie,但是没有,我被困在免责声明页面上:(
任何想法如何解决这一问题?谢谢大家!
答案
这个概念按预期工作。重定向按照描述执行,但浏览器已缓存重定向,因为它是永久重定向(301)。解决方案是使用临时重定向(302)。
我最终还存储了cookie中截取的网址,以保持网址清洁。但我没有设法通过重定向设置cookie的实时时间。似乎没有办法在重写规则中计算它。我用了一些javascript来重写catch页面上的cookie。
以上是关于mod_rewrite,重定向并设置cookie,防止重定向循环的主要内容,如果未能解决你的问题,请参考以下文章
mod_rewrite 不在 XAMPP 上执行特定重定向 - 与 DirectoryIndex 冲突?