2010-12-12 68 views
1

J'ai déployé mon application Wicket à/myapp dans Tomcat, et je l'ai mis derrière le serveur web Apache en utilisantComment corriger (Wicket dans) Tomcat à/myapp derrière proxy Apache à/qui envoie une redirection incorrecte vers/myapp/xxx au lieu de/xxx?

ProxyPass/http://localhost:8080/myapp/ 
ProxyPassReverse/http://localhost:8080/myapp/ 

Maintenant Wicket redirigent les utilisateurs à tort/myapp/xxx au lieu de/xxx.

Est-il possible de faire en sorte que Wicket (1.3.5) utilise/comme mon chemin racine (au lieu de/myapp qui est le chemin du contexte de déploiement de servlet) ?!

Edit: Il y a une solution décrite au lien suivant mais il ne marche pour la version 1.3.5: Je l'ai trouvé: https://cwiki.apache.org/WICKET/wicket-behind-a-front-end-proxy.html

Edit: Le problème est que le chemin relatif utilise wicket avec ServletResponse # réoriente sendRedirect et Tomcat les convertissent en redirections absolues contenant/myapp au début. J'ai essayé mod_jk (AJP) mais il n'y avait pas de différence!

Il devrait y avoir un moyen de dire à proxy-pass ou mod-jk de réécrire les redirections avant de les envoyer au client!

Répondre

0

Vous pouvez trouver ce document Tomcat utile:

http://tomcat.apache.org/connectors-doc/generic_howto/proxy.html

Il aborde la situation ci-dessus avec RedirectMatch et mod_rewrite.

+0

Sur cette page, la section suivante est la solution: 2. Utilisez mod_headers pour réécrire les redirections HTTP que votre application pourrait renvoyer. ... Éditeur d'en-tête Emplacement^([^ /] * // [^ /] *)?/(. *) $ $ 1/myapp/$ 2 –

0

Non testé moi-même, mais avez-vous regardé mod_rewrite? Il y a quelques exemples décrivant ce que vous voulez faire here.

+0

Oui, mais je n'ai pas compris comment réécrire les redirections, ni comment dire à tomcat comment convertir correctement les URL de redirection. –

1

Je n'ai pas trouvé de réponse directe mais j'ai utilisé la solution de contournement suivante avec mod jk, je suppose qu'il est également possible de faire avec proxy pass.

RewriteRule   /myapp/(.*)  /$1 [L,R] 
RewriteRule   ^(.*)   /myapp$1 [PT] 
JkMount    /myapp/*   ajp13_worker 

Première ligne réoriente demande provenant du client à partir de/myapp/* (qui sont le résultat de Wicket/Tomcat/Apache réoriente incorrect) à/*.

La deuxième ligne réécrit toutes les demandes de/* vers/myapp/* et la troisième ligne les envoie à tomcat.

Pour passer proxy, troisième ligne doit être remplacé par:

ProxyPass    /myapp/   http://localhost:8080/myapp/ 
ProxyPassReverse  /myapp/   http://localhost:8080/myapp/