【发布时间】:2019-07-15 19:53:23
【问题描述】:
给出上下文,目标:
使用 apache httpd,我需要测试请求 uri 的上下文段是否包含在标头中发送的 cookie 值中,然后将用户重定向到启动页面以确认 cookie,或允许他们访问该站点。
鉴于以下情况:
网址:http://www.example.com/en/gb/main.html
cookie: ;acceptedCookies=fr,en,de,it
如果 url 的语言段 = "en",并且这是用户接受的 Cookies。然后允许用户访问主站点,否则将用户重定向到启动页面。
我的尝试:
SetEnvIf Host ^ uriCountryCode=NUL SetEnvIfNoCase Request_URI "^(.+)?\/([a-zA-Z]{2})\/[a-zA-Z]{2}\/.+$" uriCountryCode=$2 SetEnvIf Host ^ acceptedCookieList=EMP SetEnvIf Cookie "(^|;\*)acceptedCookies=([^;]+)?" acceptedCookieList=$2
#1st.
<If "%{acceptedCookieList} =~ %{uriCountryCode}">
// Doesn't work
</If>
#2nd.
<If "env('acceptedCookieList') =~ env('uriCountryCode')">
// No luck
</If>
#3rd.
<If "env('acceptedCookieList') =~ /env('uriCountryCode')/">
// Now I'm just guessing
</If>
#4th.
RewriteCond %{acceptedCookieList} !%{uriCountryCode}
RewriteCond %{REQUEST_URI} !^/en/gb/splash.html$ [NC]
RewriteRule ^(.+)$ /mt/en/splash [L,R=301]
我最近了解到其中一些模块,即 env('x') 不会加载 SetEnvIf 变量,因为 SetEnvIf 变量加载得不够早,无法访问,但我正在尝试找到一个 httpd 解决方案我的问题
【问题讨论】:
-
感谢@Avi - 关注这个问题的夜晚太多让我变得愚蠢,不敢相信我从来没有早点看到这个缺陷。我将放弃解决方案并重新开始。
标签: apache mod-rewrite httpd.conf mod-env