从请求中获取 Url 参数并将其存储在 apache 配置中的变量中

从请求中获取 Url 参数并将其存储在 apache 配置中的变量中

在我的 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 以延长其有效期。

相关内容