Apache Server RewriteRule到Tomcat WAR

时间:2014-05-08 16:13:41

标签: apache .htaccess tomcat mod-rewrite war

我试图让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,但这些都没有像我预期的那样工作(没有发生)..

有人可以解释一下,我怎么能做到这一点?

非常感谢你!

2 个答案:

答案 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基本上会重定向所有内容,而不仅仅是根目录。