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