我试图让Apache的RewriteEngine重写一些到Tomcat Webapp目录的URL。 它已经部分工作,但有一件事是我无法实现的。
这是情景:
我有一个apache和一个在vps上运行的tomcat。 在tomcat上我有一个名为XYZ的webapp。 在Apache上,我使用带有workers.properties的jk_mod模块来连接"到了tomcat。 在我的httpd.conf中,我有一个VitualHost设置如下:
<VirtualHost *:80>
ServerName abc.domain.com
RewriteEngine on
RewriteRule ^/(.+)$ /XYZ/$1 [L,PT]
JkMount /* XYZ
</VirtualHost>
到目前为止,这么好。如果没有RewriteRule,我必须像这样打开URL:
abc.domain.com/XYZ/home (where "home" is the jsp)
abc.domain.com/XYZ/customers
etc...
和THE the RewriteRule一起来到这个:
abc.domain.com/home
abc.domain.com/customers
etc...
这对我的目标已经相当不错了,但还有一件事需要做:我希望能够打开abc.domain.com
并重定向到上面的最后一个例子(主页jsp)
我已经尝试添加一些其他RewriteRules,它们会将根重写为/XYZ/home
并尝试Redirect
,但这些都没有像我预期的那样工作(没有发生)..
有人可以解释一下,我怎么能做到这一点?
非常感谢你!
答案 0 :(得分:1)
将Redirect置于RewriteEngine子句之上。
类似的东西:
<VirtualHost *:80>
ServerName abc.domain.com
Redirect 301 ^/$ /home
RewriteEngine on
RewriteRule ^/(.+)$ /XYZ/$1 [L,PT]
JkMount /* XYZ
</VirtualHost>
答案 1 :(得分:1)
我最终将它付诸实践。使用第二个RewriteRule。我想我之前尝试过的通配符/正则表达式中有一些错误。
这是有效的:
<VirtualHost *:80>
ServerName abc.domain.com
RewriteEngine on
RewriteRule ^/(.+)$ /XYZ/$1 [L,PT]
RewriteRule ^/$ /XYZ/home [L,PT] # <---- This
JkMount /* XYZ
</VirtualHost>
在我的研究过程中,我还了解到Redirect 301 / /home
基本上会重定向所有内容,而不仅仅是根目录。