![如果不存在 cookie,则阻止站点的正确方法 apache 2.4](https://linux22.com/image/673019/%E5%A6%82%E6%9E%9C%E4%B8%8D%E5%AD%98%E5%9C%A8%20cookie%EF%BC%8C%E5%88%99%E9%98%BB%E6%AD%A2%E7%AB%99%E7%82%B9%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%20apache%202.4.png)
我在节点应用程序后面使用 apache 2.4.12(Ubunutu 15.10)作为 oauth2 代理。该应用程序在登录前发送大量未经身份验证的请求,因为它不知道它未经身份验证(它不知道/不关心代理),这会创建大量可能导致问题的大型 cookie。
我想做的是,如果某个 cookie 不存在(mod_auth_openidc_session)——这意味着它尚未进行身份验证——则阻止对我的服务器的所有请求。到目前为止,我有这个,但我不确定这是否正确(因为这种情况需要时间来重现):
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !mod_auth_openidc_session
RewriteRule .*my.server.com.* [F]
这是我想要的吗?:
除非存在 cookie mod_auth_openidc_session,否则阻止所有对 http(s)://my.server.com/ 或 http(s)://my.server.com/login 等的请求。
答案1
您的总体目标让我感到很奇怪,但就您的重写配方而言,该RewriteRule
指令是错误的。一般语法是RewriteRule Pattern Substitution [flags]
,其中 Pattern 与 url 中的路径相对应,但由于您的匹配符合重写 Cond 规则,因此您可能只需要RewriteRule (.*) $1 [F]
。如果您确实只想匹配一个主机,则需要另一个 RewriteCond 规则来匹配HTTP_HOST
。