我有一個Apache 2.2,我使用mod_rewrite。我的目標是將流量從 http://localhost:80/AA轉發到http://localhost:8090/BB。所以我有一個簡單的規則mod_rewrite返回302找到
重寫規則http://localhost:80/AA的http://本地主機:8090/BB
我的問題是客戶端收到 「302找到」。我希望RewriteRule將 轉發從AA到BB的流量,最後BB會將響應發送給我的客戶端。
我的配置有問題嗎?
我有一個Apache 2.2,我使用mod_rewrite。我的目標是將流量從 http://localhost:80/AA轉發到http://localhost:8090/BB。所以我有一個簡單的規則mod_rewrite返回302找到
重寫規則http://localhost:80/AA的http://本地主機:8090/BB
我的問題是客戶端收到 「302找到」。我希望RewriteRule將 轉發從AA到BB的流量,最後BB會將響應發送給我的客戶端。
我的配置有問題嗎?
RewriteRule的左側或圖案應該只是要匹配的文件名,例如, ^/AA$
。如果您還想確保主機和端口匹配特定值,則應設置RewriteCond匹配%{HTTP_HOST}
和%{SERVER_PORT}
。但是後者可能是不必要的,除非您的Web服務器配置了多個域和端口。
這是未經測試,但這樣的事情:
RewriteCond %{HTTP_HOST} ^localhost
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/AA$ http://localhost:8090/BB
我建議你嘗試就這第一:
RewriteRule ^/AA$ http://localhost:8090/BB
,如果你需要他們添加的RewriteCond的。
根據意見編輯:如果您嘗試避免「302」響應,則無法爲您描述的情況做到這一點。當你使用mod_rewrite從一臺主機重定向到另一臺時,你會得到兩個發送到瀏覽器的響應。第一個是302,它告訴瀏覽器轉到第二個URL。第二個響應應該是200.
使用mod_rewrite時,如果在相同的服務器和端口上重寫從一個頁面到另一個頁面,則可以避免中間的重定向。在這種情況下,重寫是內部的,即使請求是針對AA,Web服務器也可以用BB頁面進行響應。如果使用不同的服務器或端口,AA的Web服務器無法訪問頁面BB,因此它會將重定向響應爲有權訪問的服務器。
如果您可以重新配置站點以使用AA和BB的相同端口,則可以使其工作。如果沒有,我認爲你可以用mod_proxy做你想做的事。我從來沒有使用mod_proxy,所以我不知道你需要做什麼。
我只用了你的RewriteRule,並在行尾添加了[R = permanent,L]。結果是將錯誤301發送回客戶端。我想要的是從AA轉發到BB的規則,然後服務器在8090處將向我的客戶端發送http 200 OK – cateof 2010-11-07 16:07:02
在8090處的BB頁面是否已成功顯示?如果是這樣,那麼它工作。 :80發送301或302重定向,然後8090發送200.使用mod_rewrite從一臺服務器重定向到另一臺服務器時,您無法避開中間的301。 – bmb 2010-11-07 16:38:28
mod_proxy的問題在於,您不能在替換URL中使用問號字符。例如foo.example.com/bar?lala會發出抱怨,因爲?lala被視爲查詢字符串。這是mod_proxy - cateof 0秒前的問題 – cateof 2010-11-09 16:24:55
的文檔你想做的事是R標誌添加到您的規則,重定向。
RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]
L
爲最後的規則。
如果您希望轉發流量,我猜0123'不能這樣做。你最好使用mod_proxy
:http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypassreverse
來自實例文檔:
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
我假設有在遊戲中無論是兩個不同的Web服務器在這裏,'一個聆聽80'和'8090'一個聆聽,或你有2個不同的VirtualHosts在這2個端口上監聽Apache嗎? – 2010-11-07 15:12:12
一個tomcat服務器位於http:// localhost:8090/BB。不過,我不想告訴我的客戶更改網址。所以我安裝了apache以使用mod_rewrite功能,並從端口80 t0 8090發送流量。我不知道這是否是最佳解決方案... – cateof 2010-11-07 15:21:09
我想我對您的問題感到困惑。當你使用mod_rewrite從一臺主機重定向到另一臺主機時,你*會得到兩個發送到瀏覽器的響應。第一個是302,它告訴瀏覽器轉到第二個URL。第二個響應應該是200.除了響應代碼之外,重定向是否工作? – bmb 2010-11-07 16:35:35