如何将请求转发到另一个URL?

时间:2013-10-29 16:53:11

标签: apache mod-rewrite url-rewriting forward rule

目前,我在httpd.conf文件中有以下规则,用于将所有来自端口80的请求转发到由GlassFish应用服务器提供的端口8080:

<VirtualHost *:80>
    ServerAdmin admin@myserver.com
    ServerName myserver.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

现在,我需要添加一条规则,以便将http://myserver.com/的所有请求转发到http://myserver.com/page/index.html,并且客户端浏览器上的网址仍应显示为http://myserver.com/。我尝试在上面的VirtualHost中添加以下规则:

RewriteEngine On
RewriteRule http://myserver.com/ http://myserver.com/page/index.html

RewriteEngine On
RewriteRule ^/ http://myserver.com/page/index.html

RewriteEngine On
RewriteRule ^/index.html http://myserver.com/page/index.html

但是,当我转到http://myserver.com/时,浏览器会出现此错误:This webpage has a redirect loop。第3条规则只有在我转到http://myserver.com/index.html时才有效。

我在为Apache编写规则时是一个完全的菜鸟。因此,如果你能告诉我这里我做错了什么,我将非常感激:)。

更新

以下规则完美无缺:

RewriteEngine On
RewriteRule ^/$ /page/index.html [R]

1 个答案:

答案 0 :(得分:1)

您需要添加一个$来表示URI的结尾:

RewriteEngine On
RewriteRule ^/$ http://myserver.com/page/index.html

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

如果没有$,则正则表达式^/会匹配/page/index.html,这会导致它再次重定向,并且它会再次匹配,并再次重定向等等。