web-dev-qa-db-ja.com

Tomcat 8 URL書き換え

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に書き換えようとしましたが、動作は同じです。

13
kamelot

私は解決策を見つけました、問題は間違った/障害のあるrewrite.configファイルにありました。正しいはずです:

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

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

1行目には、書き換えるべきではない列挙されたURIがあります。その他はすべてindex.htmlに書き換えられます。

12
kamelot

これは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>
4
Nicholas Hirras

これをREQUEST_URIで機能させることができず、特定のファイルをホワイトリストに登録する必要がなかったので、 少し異なる方法 で解決しました。

1
mhvelplund