Mod-Rewrite

如果 cookie 不存在,則阻止站點的正確方法 apache 2.4

  • September 19, 2016

我正在使用 apache 2.4.12 (Ubunutu 15.10) 作為節點應用程序後面的 oauth2 代理。該應用程序在登錄 b/c 之前發送了許多未經身份驗證的請求,它不知道它沒有經過身份驗證(它不知道/關心代理),這會創建大量可能導致問題的大型 cookie。

我想做的是說如果一個特定的 cookie 不存在(mod_auth_openidc_session)——這意味著它還沒有經過身份驗證——阻止對我的伺服器的所有請求。到目前為止,我有這個,但我不確定這是否正確(因為這種情況需要時間來重現):

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !mod_auth_openidc_session
RewriteRule .*my.server.com.* [F]

這是在做我想要的嗎?:

阻止對 http(s)://my.server.com/ 或 http(s)://my.server.com/login 等的所有請求,除非 cookie mod_auth_openidc_session 存在。

你的總體目標讓我覺得很奇怪,但就你的重寫配方而言,RewriteRule指令是錯誤的。一般語法是RewriteRule Pattern Substitution [flags],Pattern 與 url 中的路徑行進,但由於您的匹配可以通過重寫 Cond 規則進行,因此您可能只需要RewriteRule (.*) $1 [F]. 如果您確實只想匹配一個主機,則需要另一個 RewriteCond 規則來匹配HTTP_HOST.

引用自:https://serverfault.com/questions/743056