2012-02-16 37 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