[Apache] mod_rewrite et l'uri masking

mod_rewrite et l'uri masking [Apache] - Réseaux - Systèmes & Réseaux Pro

Marsh Posté le 29-09-2010 à 14:35:33    

Bonjour,
 
Je sais pas vous, mais mod_rewrite m'a toujours filé des migraines : O
Voici un cas spécifique que je souhaiterais résoudre.
 
Concrètement, j'ai une application disponible via l'URL www.monapp.fr/BrandNewApp
Le but de la manoeuvre est de planquer aux utilisateurs extérieurs le mot-clé Brand dans mon context-root.
Il faut donc que mon utilisateur tape sur www.monapp.fr/NewApp
 
Mon Apache doit alors réécrire /NewApp en /BrandNewApp pour que cela soit compréhensible par mon application server backend qui s'attend à desservir l'application /BrandNewApp.
Jusque là, ce n'est pas trop compliqué, mais cela se complexifie lorsque mon serveur backend redirige lui-même vers une autre page, donc toujours sur /BrandNewApp alors que mon utilisateur ne doit voir dans son URL que /NewApp.
 
Comment démêler ce casse-tête ?
Il doit y avoir une combine incluant un mix de mod_proxy (reverse) + mod_rewrite mais j'avoue être un peu paumé.
 
Si quelqu'un a une idée, merci beaucoup !
 
 :hello:

Reply

Marsh Posté le 29-09-2010 à 14:35:33   

Reply

Marsh Posté le 05-10-2010 à 09:11:42    

Je vois que mon sujet inspire beaucoup de monde  :sweat:  
Quelqu'un aurait-il un début d'idée peut-être ? Ou besoin de précisions quant à ma requête ?
 
Merci : )

Reply

Marsh Posté le 05-10-2010 à 22:32:25    

A mon avis tu as déjà quasiment trouvé, teste avec Rewrite + ProxyPassReverse et ça devrait aller.

Reply

Marsh Posté le 06-10-2010 à 13:16:08    

Je suis pas si optimiste que toi :D
 
Voici ce que j'ai tenté :
 


ProxyRequests Off
 
<Proxy *>
        Order deny,allow
        Allow from all
</Proxy>
 
ProxyPass /NewApp/ http://www.monapp.fr/BrandNewApp/
ProxyPassReverse /NewApp/ http://www.monapp.fr/BrandNewApp/


 
Ca ne fonctionne pas.
 
Pour forcer la première requête, j'ai également ajouté la partie mod_rewrite, mais en vain :


ProxyRequests Off
 
<Proxy *>
        Order deny,allow
        Allow from all
</Proxy>
 
RewriteEngine on
 
RewriteRule ^/NewApp/(.*) http://www.monapp.fr/BrandNewApp/$1 [R]
ProxyPass /NewApp/ http://www.monapp.fr/BrandNewApp/
ProxyPassReverse /NewApp/ http://www.monapp.fr/BrandNewApp/


 
 :sweat:  

Reply

Marsh Posté le 06-10-2010 à 17:22:53    

Déjà ta RewriteRule fait une redirection HTTP et non une simple réécriture (flag [R]...), je doute que ce soit ce que tu veux, tu risques d'avoir un paquet de redirections !
 
Ensuite, ton reverse proxy est la même machine physique que le serveur ?
 
- Si non, vérifie que www.monapp.fr pointe bien vers l'IP du serveur web réel (par ex grâce à une entrée dans le fichier hosts).
 
Si ce n'est pas le cas tu dois le faire (un peu dégueu), ou sinon essaie de voir ce que ça donne :  
 
ProxyPreserveHost On (ou pas, selon la conf de ton vhost "réel", a priori si)
ProxyPass /NewApp/ http://<ip_serv_reel:port>/BrandNewApp/
ProxyPassReverse /NewApp/ http://<ip_serv_reel:port>/BrandNewApp/  
 
- Si oui tu peux essayer d'utiliser la méthode précédente avec 127.0.0.1 comme IP et un vhost à l'écoute uniquement sur cette IP.

Reply

Marsh Posté le 07-10-2010 à 10:27:48    

Merci pour ta réponse.
 
Effectivement, le flag [R] n'était pas voulu, j'avais essayé depuis sans aucun flag.
 
J'ai justement testé ta solution proposée hier aprem'.
Via mon fichier hosts www.monapp.fr pointe sur l'IP du serveur Apache.
 
Avec ou sans ProxyPreserveHost, le résultat est le même.
Le premier appel sur /NewApp/ se déroule bien mais la navigation continue ensuite sur /BrandNewApp/, impossible de m'en défaire.
 
J'ai essayé en forçant le rewrite avant les directives proxy, mais en vain.
 
 :sweat:  

Reply

Marsh Posté le 07-10-2010 à 14:03:58    

Heu no offense mais sur ton serveur web, tu as du BrandNewApp ou du NewApp ? mod_proxy ne réécrit pas les liens dans le code html, je pense que tu le sais mais bon ;)
 
Sinon ben upload un .pcap des deux côtés pour voir, on aura la réponse... :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed