【发布时间】:2015-10-29 02:11:45
【问题描述】:
我将包含正在运行的 Java Spring/AngularJS 应用程序的 WAR 文件部署到 Tomcat8,该 Tomcat8 在具有以下配置的 Apache2 后面运行:
<VirtualHost *:80>
ServerName example.de
ServerAlias www.example.de
ProxyPass / http://localhost:8080/example/
ProxyPassReverse / http://localhost:8080/example/
<Location "/">
Order allow,deny
Allow from all
</Location>
</VirtualHost>
到目前为止一切顺利,正在运行。现在我想切换到 HTML5 模式,所以我解决了客户端的所有先决条件。
对于后端,我首先将 Tomcat webapp 暴露给 http://www.example.de:8080/example/,以便为 Tomcat8 添加重写规则。首先我尝试了 Tuckeys UrlRewriteFilter,然后注意到,现在有一个用于 Tomcat8 的 RewriteValve。
所以我现在在应用程序中创建了一个 WEB-INF/rewrite.config:
RewriteCond %{REQUEST_URI} ^/(css|img|js|templ|api|config|userdata|fonts).*$
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /index.html [L,QSA]
我的 /opt/tomcat/conf/context.xml 看起来像这样:
<Context usehttponly="true">
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
</Context>
现在点击 localhost:8080/example/ 时,每个请求都被重写为 index.html,因此可能所有资产都包含 index.html 的内容。至少现在启用了重写,但它没有做我想要的。
有人可以在这里找到我做错的事情吗?有没有可能调试这个?我现在感觉就像在黑暗中走来走去。
如果有帮助,这是我的 WEB-INF/web.xml,位于应用程序中:https://gist.github.com/JonasPriest/998099c509b2173ba3b1
是否有可能将重写委托给 Apache2 而不是 Tomcat 的解决方案?
【问题讨论】:
-
我今天早些时候点击了这个,看到 stackoverflow.com/questions/28767585/tomcat-8-url-rewrite 解释了如何进行设置,减去了等式中的 Apache httpd 部分。
-
谢谢,我已经看到了关于这个主题的所有 Stackoverflow 问题,并用谷歌搜索了其中的内容。我尝试了所有方法,但仍然无法完全正常工作。
-
查看您的编辑,我认为您的 .config 文件位于错误的位置。这不是网络应用级别的交易。尝试将 rewrite.config 移出 WEB-INF 并进入 Tomcat 的 conf/Catalina/localhost。
-
不幸的是,这并没有改变任何东西。我开始对这个话题感到非常沮丧......
-
这篇文章可能对你有所帮助。 tonyjunkes.com/blog/…
标签: java angularjs apache tomcat tomcat8