it-swarm.com.de

Umschreiben von Tomcat 8-URLs

Ich habe eine AngularJS Webapp und ein Jersey Backend. Ich muss das URL-Neuschreiben einrichten, so dass alles außer den angegebenen Ausnahmen in Angulars index.html überschrieben wird.

Z.B.:

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)

Ich habe das Tomcat 8 URL Rewrite Valve wie folgt eingerichtet:

in 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 ignoriert meine Einstellungen zum Überschreiben, es wird nichts überschrieben, es wird kein Fehler/Ausnahme im Protokoll angezeigt. Was mache ich falsch? Danke im Voraus.

Ich habe versucht, RewriteValve in META-INF in die config.xml zu verschieben und die Konfiguration in WEB-INF umzuschreiben, aber es verhielt sich auf dieselbe Weise.

12
kamelot

Ich habe die Lösung gefunden, das Problem war in der fehlerhaften/fehlerhaften rewrite.config-Datei Korrekt sollte Folgendes sein:

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

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

In der ersten Zeile werden URIs aufgelistet, die nicht überschrieben werden sollten. Alles andere wird in index.html geschrieben. 

10
kamelot

Wird dies als Java-Web-App (WAR) bereitgestellt? Sie könnten dies in Ihrer web.xml implementieren:

<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

Ich konnte nicht mit REQUEST_URI arbeiten, und ich mochte es sowieso nicht, bestimmte Dateien auf die Positivliste setzen zu müssen. Daher löste ich es in einem etwas anders .

1
mhvelplund