2010-03-12 16 views
2

Mon problème est le suivant: J'ai le serveur d'applications JBoss 4.2.3 avec le connecteur AJP 1.3 fonctionnant sur un hôte sous Windows (192.168.1.2 pour mon environnement de test) et Apache 2.2.14 fonctionnant sur une autre case FreeBSD (192.168.1.10). Apache agit comme une «porte d'entrée» pour toutes les demandes et les envoie à JBoss via mod_jk. Tout fonctionnait bien jusqu'à ce que je devais faire des optimisations SEO. Ces optimisations incluent des URLs SEF, j'ai donc décidé d'utiliser mod_rewrite pour Apache afin de modifier les requêtes avant qu'elles ne soient envoyées à JBoss. En fait, je nedd à mettre en œuvre 2 règles:Configurer mod_rewrite et mod_jk pour Apache 2.2 et JBoss 4.2.3

Voici ma config Apache pour le test hôte virtuel:

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "/usr/local/www/dummy" 
ServerName 192.168.1.10 

<IfModule mod_rewrite.c> 

    RewriteEngine On 

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

</IfModule> 

JkMount  /*  jsp-hostname 

ErrorLog "/var/log/dummy-host.example.com-error_log" 
CustomLog "/var/log/dummy-host.example.com-access_log" common 
</VirtualHost> 

Le problème est que la deuxième règle de réécriture ne fonctionne pas. Les demandes passent à JBoss inchangé, donc je reçois l'erreur Tomcat 404. Mais si j'ajoute le drapeau de redirection à la deuxième règle comme

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

cela fonctionne comme un charme. Mais la redirection n'est pas ce dont j'ai besoin ici :). Je suspecte que le problème est que les demandes sont transmises à l'autre hôte (192.168.1.2), mais je n'ai vraiment aucune idée sur la façon de le faire fonctionner. Toute aide serait appréciée :)

Répondre

2

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 '?'. Utilisez simplement les règles de réécriture sans cela. par exemple.

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

simplement, ne fonctionne parce que le premier RewriteRule a le [L] à la fin, ce qui signifie la dernière règle à traiter.