2009-11-27 10 views
1

Je dois envoyer toutes les requêtes pour le répertoire home/alphauser vers le backend/alphauser, mais pas les requêtes vers les fichiers du répertoire home/alphauser. Par exemple:proxy mod_rewrite RewriteRule ne fonctionne pas

 
http://home/alphauser   -> http://backend/alphauser 
http://home/alphauser/   -> http://backend/alphauser 
http://home/alphauser/icon.png -> http://home/alphauser/icon.png 
http://home/alphauser/index.html -> http://home/alphauser/index.html 

J'ai créé un fichier ".htaccess" dans la maison/alphauser/avec les éléments suivants:

RewriteEngine on 
RewriteRule ^$ http://backend/alphauser [P]

mod_rewrite permet d'accéder aux fichiers à l'intérieur de la maison/alphauser/répertoire prévu, mais quand le répertoire lui-même est demandée avec ou sans la barre oblique:

http://home/alphauser 
http://home/alphauser/

..la navigateur (Firefox) présente un téléchargement de fichier pop-up qui indique:Le contenu du fichier est le code html approprié de backend/alphauser (qui est le modèle d'URL vers un JSP) afin que la charge utile retournée soit correcte. Il semble que si apache renvoie cet étrange type mime de "httpd/unix-directory"

Aide!

+0

Lorsque vous l'envoyez à mod_proxy avec l'indicateur '[P]', avez-vous cette configuration correctement? J'ai le sentiment que cela pourrait être à cause de cela. Que disent vos journaux? Vous pouvez définir le type MIME d'une RewriteRule avec l'indicateur 'T', par exemple' [T = text/html] 'mais je ne pense pas que ce soit la meilleure solution. – Bartek

+0

J'utilise déjà une directive ProxyPass dans mon fichier apache2.conf, donc je suppose que mod_proxy est configuré correctement. Le fichier error.log n'a rien, le fichier access.log ne montre qu'un message GET "/ alphauser /" avec les informations de l'agent utilisateur. J'ai essayé la même RewriteRule avec [P, T = text/html] et le résultat était exactement le même. – Lightbeard

+0

Je configure une directive RewriteLog dans apache2.conf et fixe le niveau du journal à 9. La sortie semble normale: (1) 'appliquer le motif^$ à uri ''' (2) 'réécrire -> backend/alphauser' (3) 'forcer le débit du proxy avec backend/alphauser' (4)' aller de l'avant avec proxy proxy de demande: backend/alphauser [OK] ' – Lightbeard

Répondre

0

Il s'avère que le problème n'a rien à voir avec mod_rewrite. Mon backend n'envoyait pas du tout un en-tête ContentType. Une fois que je l'ai défini pour remplir le ContentType comme text/html tout a fonctionné.

0

Robert,

cela semble être bizarre pour moi

RewriteEngine on 
RewriteRule ^$ http://backend/alphauser [P] 

l'expression régulière qui vous a fait essentiellement correspondre à quelque chose, mais juste peuvent acceuillir il ne passerait pas l'URI du back-end.

RewriteEngine on 
RewriteRule ^/alphauser/$ http://backend/alphauser [P] 

ou

RewriteRule ^/$ http://backend/alphauser [P] 

Je ne suis pas 100% sûr de savoir comment se comportent mod_rewrite dans un fichier .htaccess

Cela ferait beaucoup de sens de mon opinion, vous avez aussi à vous assurer que vous avez mod_proxy et mod_proxy_http activé ou cela ne fonctionnera pas.

+0

Pas de chance. mod_proxy est activé car j'utilise déjà les directives ProxyPass et ProxyReversePass dans apache2.conf. – Lightbeard

+0

En fait, l'expression régulière^$ est destinée à ne correspondre à aucun fichier et uniquement au répertoire. Je ne suis pas intéressé par passer l'URI -.htaccess est déjà dans le répertoire alphauser - donc l'URI à passer est déjà connue. Je souhaite que les demandes adressées au répertoire/alphauser/passent par une servlet/JSP et que d'autres demandes se poursuivent normalement. – Lightbeard

+0

Je vais modifier ma réponse – RageZ

Questions connexes