我有一个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)
我已经设置了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>
在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忽略我的重写设置,没有重写,日志中没有错误/exception。 我究竟做错了什么? 提前致谢。
我试图将RewriteValve移动到META-INF的config.xml中,并将configuration重写为WEB-INF,但它的行为方式相同。
我找到了解决办法,问题是在错误/错误的rewrite.config文件。 正确的应该是:
RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$ RewriteRule ^.*$ - [L] RewriteRule ^.*$ /index.html [L,QSA]
第一行是枚举的URI,不应该被重写。 其他的一切都会被重写为index.html。
这是部署为一个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>
我无法得到这与REQUEST_URI,我不喜欢白名单特定的文件无论如何,所以我用一个稍微不同的方式解决它。