我在节点应用程序后面使用 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
。