2012-02-16 32 views
5

是否有可能使用mod_rewrite在內部重定向(因此URL不會在地址欄中更改)到同一主機上的不同端口? 如Apache mod_rewrite內部到不同的端口

http://host.com:8080 -> http://host.com:9999/myapplication/?param=val 
+1

看看'mod_proxy' ..以及重寫規則的'[P]'(代理)標誌。 – LazyOne 2012-02-16 09:17:25

+0

謝謝,[P]盡我所能。關於第3點, – mm1 2012-02-16 11:54:59

回答

5

1,啓用mod_proxy的

LoadModule proxy_module   modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 

2,你應該對虛擬主機的配置apache:

<VirtualHost *:8080> 
    .... 
    ProxyPass/http://host.com:9999/myapplication/?param=val 
    ProxyPassReverse/http://host.com:9999/myapplication/?param=val 

</VirtualHost> 

3,安裝程序還虛擬主機端口9999

更多信息這裏:

+0

:你可以在你的答案中包括如何做到這一點?謝謝 – kiltek 2016-02-01 14:13:47

0

擬訂一項關於mod_proxy的解決方案與[P],代理標誌:

  1. 啓用模塊的mod_proxy和mod_proxy_http:

    a2enmod proxy proxy_http 
    

    沒有啓用這兩個,你' d後來獲得300 Forbidden狀態,並在日誌中顯示錯誤消息「AH00669:嘗試在未啓用代理的情況下從mod_rewrite發出遠程請求」。以下到爲轉發主機Apache2的虛擬主機配置部分

  2. 地點:

    <VirtualHost *:8080> 
        … 
        RewriteEngine on 
        RewriteCond %{REQUEST_URI} !^$ 
        RewriteCond %{REQUEST_URI} !^/ 
        RewriteRule .*    - [R=400,L] 
    
        RewriteRule (.*) http://host.com:9999/myapplication/$1?param=val [P,L] 
        … 
    </VirtualHost> 
    

    這包括由史蒂夫·韋伯斯特的技術,以防止惡意URL各具特色,explained here。不過,不知道如何處理在這種情況下附加GET參數。

  3. 重新啓動的Apache2:

    sudo service apache2 restart