目前,我在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]
答案 0 :(得分:1)
您需要添加一个$
来表示URI的结尾:
RewriteEngine On
RewriteRule ^/$ http://myserver.com/page/index.html
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
如果没有$
,则正则表达式^/
会匹配/page/index.html
,这会导致它再次重定向,并且它会再次匹配,并再次重定向等等。