Apache mod_rewrite内部到不同的端口

时间:2012-02-16 08:51:09

标签: apache mod-rewrite

是否可以将mod_rewrite内部重定向(因此地址栏中的url不会更改)到同一主机上的不同端口? 例如

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

2 个答案:

答案 0 :(得分:5)

1,启用mod_proxy

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

2,您应该为vhost配置apache:

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

</VirtualHost>

3,在端口9999上设置VHost

更多信息:

答案 1 :(得分:2)

使用代理标志[P]对mod_proxy解决方案进行详细说明:

  1. 启用模块mod_proxy和mod_proxy_http:

    a2enmod proxy proxy_http
    

    如果未启用这两项,您将在以后获得300 Forbidden状态和错误消息&#34; AH00669:尝试在未启用代理的情况下从mod_rewrite发出远程请求&#34;在日志中。

  2. 将以下内容放入转发主机的Apache2 vhost配置部分:

    <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>
    

    这包括Steve Webster防止恶意URL制作的技术,explained here。但是不知道如何处理在这种情况下附加GET参数。

  3. 重启Apache2:

    sudo service apache2 restart