2017-06-23 141 views
1

目標: 執行條件重定向/向前從站點1到基於所述請求(Site 1中)的特定報頭(HTTP_SM_USER)值站點2,並確保所有的當前的自定義首部的數據是作爲重定向/轉發的一部分轉發到Site2。重定向後,用戶可以在瀏覽器窗口中看到URL更改。阿帕奇條件重定向規則不轉發標頭值

流量: 用戶訪問網站1 - >外部應用程序集,除了一些自定義頁眉基於一定的標準爲默認HTTP頭 - >的Web服務器查找特定的頭值,如果匹配所有的頭重定向到站點2

Apache Web服務器配置:

<VirtualHost *.443> 
    ServerName site1.com 
    ServerAdmin [email protected] 
    UseCanonicalName on 
    DocumentRoot /var/www/html 

    # 
    # SSL Config comes here 
    # 

    ErrorLog /path/to/error/log 
    TransferLog /path/to/access/log 
    LogLevel warn 

    RewriteEngine On 
    RewriteCond %{HTTP:SM_USER} ^USER1$ [NC] 
    RewriteRule .* https://site2.com/$1 [R=301, L] 

    <Location /page1> 
    . 
    . 
    </Location> 

    . 
    . 
    . 

</VirtualHost> 

問題:發生條件重定向,但標題丟失。我應該怎麼做才能確保HTTP頭部也被轉發?我試圖看到Apache的mod_proxy,但不知道如何在這種情況下使用它。請專家幫忙。任何替代建議也歡迎。

+0

會添加[P]標誌幫助嗎?試想一下。我需要嘗試一下,讓線程知道它。 –

+0

@OlafDietsche - 有什麼建議嗎? –

+0

[P]標誌沒有幫助行爲。標題還沒有通過。 –

回答

0

您不能擁有重定向「轉發」頭,因爲它取決於客戶端發送重定向後發送給下一個服務器的內容。它可能會選擇不遵循重定向!不太可能,只是爲了明確情況。

如果您希望在瀏覽器中更改URL,則需要在應用程序端執行此操作。讓您的應用程序處理指向下一個服務器,然後發出一個200響應,並附帶一條指令來執行此操作。然後它可以像第一次請求那樣發送自定義標題。

如果這是不可接受的,那麼使用mod_proxy可以像你說的那樣工作,但它不會改變瀏覽器中的URL,因爲第一個服務器會將請求代理到第二個服務器,所以瀏覽器仍然會看到它作爲第一個。

總之,你不能做你想做的事情,因爲HTTP不會這樣工作,所以你將不得不以某種方式妥協,或者不改變瀏覽器中的URL,或者更新應用程序來照顧它。

+0

感謝@SuperDuperApps進行響應。 不幸的是,最初設置標題的應用程序對我們來說是一個黑匣子,我們無法對其進行修改。我繼續嘗試使用mod_proxy來解決我的情況,但是頭文件也沒有得到轉發。您能否在mod_proxy一側提供一些額外的指針以確保頭文件正確轉發。 –

0

解決方案:

我終於得到了它的使用下面的標誌和代理規則很多後故障排除(與mod_proxy的)工作。所有重寫規則已被刪除。

ProxyRequests Off 
ProxyPreserveHost On 
SSLProxyEngine On 

ProxyPass "/" "https://site2.com/" Keepalive=On 
ProxyPassReverse "/" "https://site2.com/" 

注:用戶訪問網站1 - >外部應用程序設置頁眉和Apache立即向代理網站現在2頭可在站點2。