2013-11-15 53 views
1

我有一個WordPress網站,我需要重寫某些頁面的URL以顯示它們來自特定的子域以匹配已經存在的打印件。我正在嘗試通過htaccess和mod_proxy來做到這一點,並越來越接近,但需要一些幫助。使用mod_proxy重寫顯示給用戶的URL

下面是代碼我現在有這在一定程度作品:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.edu$ [NC] 
RewriteRule^http://othersubdomain.domain.edu/folder1/folder2/folder3%{REQUEST_URI} [L,P] 

如果我在subdomain.domain.edu型,我得到正確的頁面(這是坐在http://othersubdomain.domain.edu/folder1/folder2/folder3)和瀏覽器的網址保持寫作爲subdomain.domain.edu。這很好用!

問題出在內頁。例如,如果我鍵入subdomain.domain.edu/contact,我會將其重定向到正確的頁面,但URL不會保留重寫,它會顯示其提供位置的完整URL。

有人可以幫我改寫內頁的URL嗎?我感覺我好親近!

回答

2

那麼,你這裏主要不是使用mod_proxy。您正在使用mod_rewrite的代理標誌。至少,您需要使用ProxyPassReverse以確保URL保持不變。

此外,在您的用例中不建議使用mod_rewrite。您的後端服務器返回的頁面可能具有嵌入的絕對URL,這些URL直接引用othersubdomain.domain.edu。您應該使用mod_proxy的ProxyPass或ProxyPassMatch以及mod_proxy_html。如果你仍然無法弄清楚,請在評論中告訴我。

UPDATE

首先,需要一些時間坐下來閱讀the complete documentation about mod_proxy。它是最強大的apache模塊之一,深入學習它將會有很長的路要走。其次,不要爲此使用.htaccess。

我假設你有一個爲你的特定子域配置的虛擬主機。如果沒有,你應該首先進行配置。現在,在你的虛擬主機配置,添加這些行:

<VirtualHost *:80> 
    ServerName subdomain.domain.edu 

    ProxyPass  /http://othersubdomain.domain.edu/folder1/folder2/folder3/ 
    ProxyPassReverse/http://othersubdomain.domain.edu/folder1/folder2/folder3/ 
    ProxyPassReverseCookieDomain othersubdomain.domain.edu subdomain.domain.edu 
    ProxyPassReverseCookiePath /folder1/folder2/folder3//
</VirtualHost> 

以上配置指令將代理爲http://subdomain.domain.edu/foo/barhttp://othersubdomain.domain.edu/folder1/folder2/folder3/foo/bar的請求。當響應可用時,其標題將被更改,以便用戶看到它已從subdomain.domain.edu生成。如果您的後端服務器生成任何Cookie(例如用戶必須登錄),則需要Cookie指令。

這將帶你很長的路要走。之後,如果要更改頁面內容,嵌入式樣式表或JavaScript中的鏈接,請參閱mod_proxy_html的文檔。

+0

'ProxyPassReverse'在htaccess文件中不起作用,它只在代理響應是重定向時才重寫'Location:'標頭。它不會對頁面內容中的鏈接做任何事情。 –

+0

@JonLin - 請參閱第二段 - 我建議首先使用mod_proxy +推薦mod_proxy_html來處理頁面內容中的鏈接。任何可以在.htaccess文件中完成的事情都可以移動到服務器,虛擬主機或目錄配置中。 – Chandranshu

+0

對不起,但我主要是一個IIS和.NET的傢伙。你對我應該添加的語法有何建議? Apache的整個世界讓我非常困惑。再次感謝任何幫助。 – user2994930