【问题标题】:AngularJS HTML5-mode with Tomcat8 and Apache2带有 Tomcat8 和 Apache2 的 AngularJS HTML5 模式
【发布时间】: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


【解决方案1】:

Tomcat 在其路由中找不到 '/example/test',当您的服务器接收到 url 'http://localhost:8080/example/test' 时,您应该返回 'http://localhost:8080/' ,并且 '/example/test' 将在角度路由中工作

【讨论】:

  • 我不明白该建议背后的想法。 '你应该返回'localhost:8080''是什么意思?
  • @JonasPriest 返回首页,如 index.html,无论您收到什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 2015-05-03
  • 2015-01-17
  • 2018-07-10
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多