在我的 apache 配置中,我只想在特定的 url 参数与特定的 cookie 匹配时才允许访问。
我想象一个与此类似的解决方案(伪代码):
param = get_url_parameter_with_a_specific_name_from_request
if (!http_cookie_includes_a_cookie_named_<param>) {
Require all denied
}
我怎样才能实现它?
<If "%{QUERY_STRING} =~ /myparam=abc/>
<If "${HTTP_COOKIE} =~ /abc=1/">
Require all granted
</If>
<Else>
Require all denied
</Else>
</If>
<Elseif "%{QUERY_STRING} =~ /myparam=def/>
<If "${HTTP_COOKIE} =~ /def=1/">
Require all granted
</If>
<Else>
Require all denied
</Else>
</Elseif>
<Elseif "%{QUERY_STRING} =~ /myparam=ghi/>
<If "${HTTP_COOKIE} =~ /ghi=1/">
Require all granted
</If>
<Else>
Require all denied
</Else>
</Elseif>
<Elseif "%{QUERY_STRING} =~ /myparam=whatever/>
<If "${HTTP_COOKIE} =~ /whatever=1/">
Require all granted
</If>
<Else>
Require all denied
</Else>
</Elseif>
...
我怎样才能写这个而不whatever
具体提及该部分,而是使用变量?
答案1
我不太确定我是否正确理解了你的问题。
我之前用过这个来半保护一个网站:
RewriteEngine On
# Allow access when the GET parameter t=let_me_in is set and set a cookie
<If "%{QUERY_STRING} =~ /t=let_me_in$/">
RewriteRule ^(.*)$ "/?t=authorized" [R,CO=ALLOWED:YES:dev.example.com]
</If>
# Allow access when the cookie is set
<ElseIf "%{HTTP_COOKIE} =~ /ALLOWED/">
RewriteRule ^(.*)$ "-" [CO=ALLOWED:YES:dev.example.com]
</ElseIf>
# Reject everybody else
<Else>
Require all denied
</Else>
如果请求的查询字符串包含特定令牌(在这种情况下,t=let_me_in
名为 的 cookieALLOWED
将设置为其值YES
。
如果设置了此 cookie,则允许访问,否则拒绝访问。
每次发出授权请求时,都会再次设置 cookie 以延长其有效期。