我现在在这里呆了几个小时……任何帮助将不胜感激!
我需要做什么:
有一个需要“保护”的应用程序。这意味着我需要显示一个“免责声明”页面,该页面不是受保护应用程序本身的一部分,而是在同一域/服务器下。此免责声明页面需要每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}]
当前结果:
有什么办法解决此问题吗?预先谢谢大家!
答案 0 :(得分:0)
该概念按预期工作。重定向已按照说明执行,但浏览器已将其缓存为永久重定向(301)。解决方案是使用临时重定向(302)。
我最终还是将拦截的URL存储在cookie中,以保持URL干净。但是我没有通过重定向设置cookie的生存时间。似乎没有办法在重写规则中进行计算。 我已经使用一些JavaScript重写了捕获页面上的cookie。