Tomcat 8 URL重写

kam*_*lot 13 java apache url-rewriting angularjs tomcat8

我有一个AngularJS webapp和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)
Run Code Online (Sandbox Code Playgroud)

我已经设置了Tomcat 8 URL重写阀,如下所示:

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>
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

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

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

kam*_*lot 12

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

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

RewriteRule ^.*$ /index.html [L,QSA]
Run Code Online (Sandbox Code Playgroud)

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


Nic*_*ras 5

这是否部署为 Java Web 应用程序 (WAR)?你可以在你的 web.xml 中实现它:

<servlet>
   <servlet-name>index</servlet-name>
   <jsp-file>/index.html</jsp-file>
</servlet>

<servlet-mapping>
   <servlet-name>index</servlet-name>
   <url-pattern>/</url-pattern>
   <url-pattern>/about</url-pattern>
   .. as many as you need ..
<servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

  • @Talador12,在某些情况下,这很有效并且是合适的。考虑一个服务于多个战争文件的 Tomcat 实例。必须解决动态解决方案以适应任何新的和不同的事物。该解决方案是自包含的。 (2认同)