web-dev-qa-db-fra.com

Tomcat 8 Réécriture d'URL

J'ai une application Web AngularJS et un backend Jersey. Je dois configurer la réécriture d'URL, de sorte que tout sauf les exceptions spécifiées sera réécrit dans index.html d'Angular.

Par exemple.:

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)

J'ai configuré la vanne de réécriture d'URL Tomcat 8 comme suit:

dans 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>

dans conf/Catalina/mon.domaine.com/rewrite.config

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} ^/rest.*
RewriteRule ^ - [L]

RewriteRule ^ index.html [L]

Tomcat ignore mes paramètres de réécriture, rien n'est réécrit, aucune erreur/exception ne figure dans le journal. Qu'est-ce que je fais mal? Merci d'avance.

J'ai essayé de déplacer RewriteValve vers config.xml dans META-INF et de réécrire config vers WEB-INF, mais son comportement était identique.

12
kamelot

J'ai trouvé la solution, le problème était dans le fichier rewrite.config incorrect/défectueux . Correct devrait être:

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

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

Sur la première ligne figurent les URI énumérés qui ne doivent pas être réécrits. Tout le reste sera réécrit dans index.html. 

10
kamelot

Est-ce déployé en tant qu'application Web Java (WAR)? Vous pouvez implémenter cela dans votre 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

Je n'arrivais pas à faire en sorte que cela fonctionne avec REQUEST_URI, et je n'aimais pas quand même avoir à ajouter à la liste blanche des fichiers spécifiques. Je l'ai donc résolu d'une légèrement différente .

1
mhvelplund