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>
in 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に移動し、configをWEB-INFに書き換えようとしましたが、動作は同じです。
私は解決策を見つけました、問題は間違った/障害のあるrewrite.configファイルにありました。正しいはずです:
RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /index.html [L,QSA]
1行目には、書き換えるべきではない列挙されたURIがあります。その他はすべてindex.htmlに書き換えられます。
これはJava web app(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で機能させることができず、特定のファイルをホワイトリストに登録する必要がなかったので、 少し異なる方法 で解決しました。