Apache-2.2
Apache2 - 從 URL 參數或 cookie 轉發一個值,以存在者為準
我設法使用 apache 剝離了一個 url 參數並將其填充到標頭中以傳遞給另一台伺服器。請參閱此問題以供參考。
現在我想通過從 cookie 中獲取 header 的值來添加它,如果它不存在於 URL 中。這是我嘗試過的:
<VirtualHost *:80> RewriteEngine On RewriteCond %{QUERY_STRING} ^(.*)memberUuid=(.*)$ RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [CO=memberUuid:%2:localhost,E=memberUuid:%2,P] RewriteCond %{HTTP_COOKIE} memberUuid=(.*) RewriteRule ^/(.*)$ http://127.0.0.1:9000/$1 [E=memberUuid:%2,P] ProxyPreserveHost On ProxyPass /excluded ! ProxyPass / http://127.0.0.1:9000/ ProxyPassReverse / http://127.0.0.1:9000/ Header add iv-user "%{memberUuid}e" RequestHeader set iv-user "%{memberUuid}e" </VirtualHost>
如果在 URL 中,這仍然有效
memberUuid
,但它似乎不適用於 cookie。我的瀏覽器中有memberUuid
cookie,但如果我關閉 URL 參數,則iv-user
標頭的值為空。我也嘗試
([^;]+)
了我的正則表達式,正如這篇文章中所推薦的那樣。我確信我的錯誤與我是一個完整的 apache 白痴有很大關係。我是一個完全的菜鳥,並不不好意思說出來。請賜教!
編輯
我已經更新了我的虛擬主機,這樣如果
memberUuid
cookie 來自查詢字元串,apache 就會在使用者的瀏覽器中設置它。這樣,我可以確定 cookie 出現在下一個請求中(我之前讓目標伺服器執行此操作)。
這可能不是唯一的問題(我以前從未在 mod_rewrite 中進行過 cookie 匹配);但我認為這是因為您對 the 的反向引用
RewriteRule
仍然是%2
. 您在前一個中只有一個帶括號的匹配RewriteCond
,因此它擴展為空。嘗試[E=memberUuid:%1,P]