Tomcat derrière Apache httpd – ignorant RewriteRule?

J'ai une configuration assez commune d'un server d'applications Tomcat derrière apache httpd utilisant mod_proxy. Mon hôte virtuel ressemble à ceci:

<VirtualHost test.example.be:80> ServerName test.example.be RewriteEngine on RewriteRule ^/test/(.*)$ /$1 ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8181/test/ ProxyPassReverse / http://localhost:8181/test/ </VirtualHost> 

L'application déployée dans Tomcat, «test», utilise une structure (security de spring) qui est contextuelle et prépare ainsi la racine contextuelle lors de la redirection. Donc, quand il redirige vers une page appelée foo.html qui est située dans la racine, elle redirige vers bleh: //test.example.com/test/foo.html. Cette URL n'existe pas et donne un 404. Puisque je ne peux pas contrôler la précontrainte de la racine contextuelle, j'ai pensé que je pourrais contourner cela en utilisant mod_rewrite en supprimant la racine contextuelle. Malheureusement, cela ne fonctionne pas: c'est comme si le RewriteRule était totalement ignoré.

J'ai remarqué une chose étrange: une requête pour bleh: //test.example.com/test/foo.html ne sera même pas transmis à Tomcat: j'obtiens la page 404 familière d'apache httpd. Si j'entre dans une autre URL fausse, comme bleh: //test.example.com/jfaklkfdjljfkl, je reçois la page 404 de Tomcat. Je m'attends à ce que bleh: //test.example.com/test/foo.html donne un appel à bleh: // localhost: 8181 / test / test / foo.html, mais évidemment, je manque quelque chose ici.

Je suis loin d'être un expert dans ces domaines afin que toute aide soit grandement appréciée.

METTRE À JOUR

J'ai fait des progrès dans ce domaine. On m'a dit qu'il était possible de consigner la sortie de debugging à partir de mod_rewrite, donc je l'ai fait exactement. Voici la partie pertinente de ces journaux:

 [12/Oct/2011:10:57:09 +0200] [test.example.be/sid#7b1bc8][rid#820520/initial] (2) init rewrite engine with requested uri /test/notify [12/Oct/2011:10:57:09 +0200] [test.example.be/sid#7b1bc8][rid#820520/initial] (3) applying pattern '^/test/(.*)$' to uri '/test/notify' [12/Oct/2011:10:57:09 +0200] [test.example.be/sid#7b1bc8][rid#820520/initial] (2) rewrite '/test/notify' -> '/notify' [12/Oct/2011:10:57:09 +0200] [test.example.be/sid#7b1bc8][rid#820520/initial] (2) local path result: /notify [12/Oct/2011:10:57:09 +0200] [test.example.be/sid#7b1bc8][rid#820520/initial] (2) prefixed with document_root to /usr/local/apache/htdocs/notify [12/Oct/2011:10:57:09 +0200] [test.example.be/sid#7b1bc8][rid#820520/initial] (1) go-ahead with /usr/local/apache/htdocs/notify [OK] 

Alors, ce qui se passe ici, c'est que mod_rewrite fait exactement ce qu'il doit faire, mais pour une raison quelconque, apache ne passe pas l'url à mod_proxy, mais il prépare / usr / local / apache / htdocs et tente de résoudre cela. Donc, la nouvelle question est: comment puis-je get apache pour ne pas préciser / usr / local / apache / htdocs et simplement passer l'URL à Tomcat?

PS: J'ai dû replace 'http' par 'bleh' sur plusieurs endroits car apparemment le nombre de liens que vous pouvez publier est limité.

2 Solutions collect form web for “Tomcat derrière Apache httpd – ignorant RewriteRule?”

Utilisez simplement le drapeau [P] pour passer la requête au mod_proxy:

 RewriteRule ^/test/(.*)$ http://localhost:8181/$1 [P] 

La bonne façon de ne pas avoir le DocumentRoot pré-ajouté est soit d'utiliser la directive RewriteBase, soit d'append le drapeau PT (PassThrough) à votre règle de réécriture. Voir ici – httpd.apache.org/docs/current/rewrite/flags.html#flag_pt

  • Utilisation croissante de la memory
  • Installer la version spécifique de Tomcat via apt-get
  • Problème de rlocation du certificate SSL par un nouveau sur Tomcat 6.0 (en utilisant keytool)
  • ajoutez jcifs jar à tomcat classpath
  • Problème avec l'utilisation de la memory solr
  • comment utiliser Apache mod_proxy pour fournir l'access à Tomcat webapp
  • Créez jks pour tomcat en utilisant le fichier .key, .ca et .cert
  • Comment authentifier un user via un échange de certificates?
  • Comment configurer apache (+ ajp?) Avec le domaine tomcat example.com et le sous-domaine php blog.example.com?
  • Tomcat ralentit toutes les 30 minutes
  • Comment redirect Apache vers différents ports sur un server GlassFish?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.