Apache-2.4
如果設置了 cookie 並且僅用於子目錄,則使用代理或重定向到文件
我目前正在嘗試通過代理或基於 cookie 的 PHP 文件發送請求。該規則僅適用於
/api
.這就是我到目前為止所擁有的。它是我的 VirtualHost 配置的一部分:
RewriteEngine on # Cookie is not set. Send all request from /api/$ to local-file.php RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC] RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /local-php.php [L] # Cookie is set. Send all request to the proxy. RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC] RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b RewriteRule ^/(.*)$ http://proxy-domain.local/$1 [P,L] ProxyPassReverse /api http://proxy-domain.local
我的請求現在根據 cookie 正確路由。但不幸的是,這是全球性的,不僅路徑以
/api
. 我錯過了什麼?
# Cookie is set. Send all request to the proxy. RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC] RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b RewriteRule ^/(.*)$ http://proxy-domain.local/$1 [P,L]
第一個條件只有在 不
REQUEST_URI
以開頭時才成功。但是,這種情況似乎是多餘的,因為您可以在指令本身中執行相同的檢查,該指令目前匹配all。/api``RewriteRule
例如:
# Cookie is set. Send all request to the proxy. RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b RewriteRule ^/api/(.*)$ http://proxy-domain.local/$1 [P,L]
請注意,這要求請求至少以 開頭
/api/
,而不是/api
- 可以嗎?但是,我也會質疑第一個規則塊的邏輯:
# Cookie is not set. Send all request from /api/$ to local-file.php RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC] RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /local-php.php [L]
除了不按照評論所述進行操作外,這還會在請求**未啟動
/api
且未設置 cookie時重寫 URL 。如果設置了 cookie 怎麼辦?這也不會重寫對根目錄本身的請求 - 如果 DirectoryIndex 已經正確設置,這可能是故意的?