Tomcat 8 Réécriture d'URL
J'ai un AngularJS webapp et Jersey backend. J'ai besoin pour l'installation de la réécriture d'URL, donc tout sauf donné des exceptions seront réécrits Angulaire de l'index.html.
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 mis en place le Tomcat 8 Réécriture d'URL Valve 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/ma.domaine.com/réécriture.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, pas d'erreur/exception est dans le journal. Ce que je fais mal? Merci à l'avance.
J'ai essayé de déplacer RewriteValve à config.xml dans META-INF et de réécrire config pour WEB-INF, mais il s'est comporté de la même manière.
OriginalL'auteur kamelot | 2015-02-27
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution, le problème était dans le mauvais ou défectueux de réécriture.fichier de configuration.
Correcte devrait être:
Sur la première ligne, sont énumérés les Uri qui ne devrait pas être réécrit. Tout le reste sera réécrit pour index.html.
... et SCRIPT_FILENAME est correct, mais RewriteCond %{SCRIPT_FILENAME} -f se plaint d'un manque d'en-tête / dans la ressource. Son système Windows. Donc, le chemin est C:\... sans en-tête /de
Dans notre cas, nous avons utilisé {REQUEST_URI} au lieu de (REQUEST_FILENAME}. Nous ne pouvions pas le laisser tomber les règles complètement parce que nous avons été dans l'impossibilité de charger des actifs locaux à la demande, mais en changeant la !-f et d' !-d utiliser REQUEST_URI semble fonctionner, au moins pour l'instant.
OriginalL'auteur kamelot
Est-ce déployé en tant que java web app (la GUERRE)? Vous pourriez mettre en œuvre dans votre web.xml:
C'est absolument la mauvaise solution. L'on a accepté la réponse est dynamique, où cette réponse est codé en dur
dans certains cas, cela fonctionne bien et est approprié. Considérons une instance de Tomcat servir de multiples fichiers war. La dynamique de la solution doit être adressée à accueillir quelque chose de nouveau et de différent. Cette solution est autonome.
OriginalL'auteur Nicholas Hirras
Je ne pouvais pas obtenir que cela fonctionne avec le REQUEST_URI, et je n'aimais pas avoir à la liste blanche de fichiers spécifiques de toute façon, donc je l'ai résolu en un manière légèrement différente.
OriginalL'auteur mhvelplund