Configurer mod_rewrite et mod_jk pour Apache 2.2 et JBoss 4.2.3

Mon problème est le suivant: j’ai un serveur d’applications JBoss 4.2.3 avec un connecteur AJP 1.3 exécuté sur un hôte sous Windows (192.168.1.2 pour mon environnement de test) et Apache 2.2.14 s’exécutant sur une autre boîte FreeBSD (192.168.1.10). Apache agit comme une “porte d’entrée” pour toutes les requêtes et les envoie à JBoss via mod_jk. Tout fonctionnait bien jusqu’à ce que je devais faire des optimisations SEO. Ces optimisations incluent les URL SEF, alors j’ai décidé d’utiliser mod_rewrite pour qu’Apache modifie les requêtes avant qu’elles ne soient envoyées à JBoss. Fondamentalement, j’ai voulu mettre en œuvre 2 règles:

  • Rediriger les anciennes règles comme ” http: // nom_hôte / répertoire / ” vers ” http: // nom_hôte / ” avec une redirection permanente
  • Transmet les URL comme ” http: // nom_hôte / wtf / 123 / ” à ” http: //hostname/wtf/view.htm? Id = 123 ” pour que l’utilisateur final ne voie pas l’URL “moche” (la réécriture réelle ).

Voici ma configuration Apache pour l’hôte virtuel de test:

 ServerAdmin [email protected] DocumentRoot "/usr/local/www/dummy" ServerName 192.168.1.10  RewriteEngine On RewriteRule /directory/(.*) /$1 [R=permanent,L] RewriteRule ^/([^/]+)/([0-9]+)/?$ /$1/view.htm?id=$2  JkMount /* jsp-hostname ErrorLog "/var/log/dummy-host.example.com-error_log" CustomLog "/var/log/dummy-host.example.com-access_log" common  

Le problème est que la seconde règle de réécriture ne fonctionne pas. Les demandes sont transmises à JBoss sans modification, alors je reçois une erreur Tomcat 404. Mais si j’ajoute un indicateur de redirection à la seconde règle comme

 RewriteRule ^/([^/]+)/([0-9]+)/?$ /$1/view.htm?id=$2 [R,L] 

il fonctionne comme un charme. Mais la redirection n’est pas ce dont j’ai besoin ici :). Je soupçonne que le problème est que les demandes sont transmises à un autre hôte (192.168.1.2), mais je ne sais vraiment pas comment le faire fonctionner. Toute aide serait appréciée 🙂

La raison pour laquelle votre deuxième règle de réécriture ne fonctionne pas est que vous utilisez le ‘?’ dans votre définition d’URI et la définition d’URI ne contient jamais le séparateur ‘?’ Donc, utilisez simplement les règles de réécriture sans elle. par exemple.

 RewriteRule ^/([^/]+)/([0-9]+)/$ /$1/view.htm?id=$2 [R,L] 

Simplement, cela ne fonctionne pas car le premier RewriteRule a le [L] à la fin, ce qui signifie que c’est la dernière règle à traiter.