Apache-2.2

Apache2 - 從 URL 參數或 cookie 轉發一個值,以存在者為準

  • August 5, 2012

我設法使用 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。我的瀏覽器中有memberUuidcookie,但如果我關閉 URL 參數,則iv-user標頭的值為空。

我也嘗試([^;]+)了我的正則表達式,正如這篇文章中所推薦的那樣。

我確信我的錯誤與我是一個完整的 apache 白痴有很大關係。我是一個完全的菜鳥,並不不好意思說出來。請賜教!

編輯

我已經更新了我的虛擬主機,這樣如果memberUuidcookie 來自查詢字元串,apache 就會在使用者的瀏覽器中設置它。這樣,我可以確定 cookie 出現在下一個請求中(我之前讓目標伺服器執行此操作)。

這可能不是唯一的問題(我以前從未在 mod_rewrite 中進行過 cookie 匹配);但我認為這是因為您對 the 的反向引用RewriteRule仍然是%2. 您在前一個中只有一個帶括號的匹配RewriteCond,因此它擴展為空。嘗試[E=memberUuid:%1,P]

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