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:
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.