java - Tomcat 8 URL 重写

标签 java angularjs apache url-rewriting tomcat8

我有一个 AngularJS 网络应用程序和 Jersey 后端。我需要设置 URL 重写,所以除了给定的异常之外的所有内容都将被重写为 Angular 的 index.html。

例如:

http://my.domain.com/about will be rewritten
http://my.domain.com/photos/photo1.jpg will NOT be rewritten (file photo 1 exists)
http://my.domain.com/rest/myservice will be NOT be rewritten (it is a call to REST service)

我已经设置了 Tomcat 8 URL Rewrite Valve 如下:

conf/server.xml

<Host name="my.domain.com" appBase="webapps/MyDomainServer" unpackWARs="true"
           autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
  <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
  <!-- access logging, aliases,...-->
</Host>

conf/Catalina/my.domain.com/rewrite.config

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} ^/rest.*
RewriteRule ^ - [L]

RewriteRule ^ index.html [L]

Tomcat 忽略了我的重写设置,没有任何内容被重写,日志中没有错误/异常。我究竟做错了什么?提前致谢。

我曾尝试将 RewriteValve 移动到 META-INF 中的 config.xml 并将配置重写为 WEB-INF,但它的行为方式相同。

最佳答案

我找到了解决方案,问题出在错误/错误的 rewrite.config 文件中。 正确的应该是:

RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
RewriteRule ^.*$ - [L]

RewriteRule ^.*$ /index.html [L,QSA]

第一行是不应重写的枚举 URI。其他所有内容都将重写为 index.html。

关于java - Tomcat 8 URL 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767585/

相关文章:

javascript - 为什么我的待办事项功能不起作用?

Apache 2.4.3 和 PHP 5.4.7 上的 PHP 语法错误(foreach 模板语法)

php - netstat 和 lsof 的执行问题

java - 返回值的Java并发方法调用

java - Scene2d 图像无法缩放

javascript - 如何加载整个 AngularJs 应用程序使用的数据?

java - 在 Tomcat (JSP) 上为我的 webapp 使用一个类, "The import my_matrix cannot be resolved"

java - 当 Activity 名称存储在列表中时访问 Activity

java - Postman 中仅显示响应实体

node.js - 使用 Angular.js 将 mongoDB 对象中的项目从上到下排列到列表中