1

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

<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,并且 URL 应该仍然出现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. 第三条规则只有在我去的时候才有效http://myserver.com/index.html

在为 Apache 编写规则方面,我完全是个菜鸟。因此,如果您能告诉我我在这里做错了什么,我将不胜感激:)。

更新:

以下规则完美运行:

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

1 回答 1

2

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

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

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

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

于 2013-10-29T17:24:49.547 回答