2011-06-05 60 views
-1

我已經使用mod_proxy和mod_proxy_http將我的apache 2.2服務器配置爲簡單的轉發代理。如何重寫URL去mod_proxy

當客戶端請求以下格式的URL:

http://specific.host.com/specific?specificarg1=(.+)&specificarg2=(.+)&specificarg3=specificvalue 

在重寫形式,其中用於specificarg1specificarg2值獲得由我的服務器配置定義的值替換請求。

它也可能不使用正則表達式,但重寫一個特定的網址到另一個特定的網址,但我寧願與正則表達式匹配。

所以讀完documentsations mod_rewrite的,mod_proxy的等以後我試着像下面這樣來得到某種重寫的所有工作:

RewriteRule .* http://www.google.com/ [P,L]

就像在服務器配置,沒有什麼衝浪在代理

<VirtualHost *:80> 
ServerName domain-i-tried-to-surf-to.com 
`RewriteRule .* http://www.google.com/ [P,L] 
</VirtualHost> 

沒有運氣,要麼

ProxyPass(Reverse)/http://www.google.com 
ProxyPass(Reverse) /path/i/tried/to/surf/to http://www.google.com 
獲取時rewriten

沒有運氣太

ProxyRemote * http://www.google.com 

沒有運氣以及

我也試圖把重寫規則到proxymatch指令,但我只是無法改寫的URL。有人能指出我正確的方向嗎?

回答

1

您首先需要在開始時添加一條RewriteEngine on語句,以便讓mod_rewrite處理任何規則。

+0

可能應該提到我照顧了所有的模塊和enginges被解僱。我在想這些規則都不匹配,因爲網頁的來源不是本地服務器。我認爲這些指令旨在處理當前主機背後的資源。而不需要用戶已經配置了代理服務器。我想要的是重寫通過轉發代理請求的url,但是其中的起源不是本地服務器。我知道它有點偏離主流,但是我認爲它應該是可能的,但是這個文檔對此很模糊...... – 2011-06-05 15:55:52

+0

「解決方法」是通過將/ etc中的ip連接到另一個服務器來強制對特定域的請求/ hosts,然後該另一臺服務器具有一個vhost虛擬主機容器,該虛擬主機虛擬主機容器被配置爲監聽它,然後處理重寫規則。但我不想涉及第二臺服務器... – 2011-06-05 15:57:11

+1

啊。那麼澄清一下:你有服務器A作爲服務器B的代理服務器,並且你正在把重寫表達式放在服務器A中?如果這是正確的,你可以編輯你的問題,幷包括你的整個配置文本的服務器A,只是讓我可以肯定是什麼,因爲這應該工作得很好,但我無法從你提供的片段告訴發生了什麼事情。 – Femi 2011-06-05 16:06:09