2009-02-13 8 views
1

Je voudrais servir/foo et/foo/localement, mais les demandes de proxy pour/foo/* à un serveur distant. Cependant, la règle suivante correspond à tout ce qui précède. Qu'est-ce que je fais mal?mod_rewrite question

RewriteRule ^/foo/(.+)$ http://remote.host/$1 [P,L] 

Répondre

0

Eh bien, puisque mod_rewrite bandes normalement barres obliques du texte correspondant, je soupçonne que vous êtes soit transcrivant/anonymisation qu'imparfaitement ou il y a beaucoup d'autre se passe dans votre configuration de réécriture. Cela semble confirmé par l'impossibilité du modèle /foo/.+ matching/foo.

Pouvez-vous développer et revérifier ce que vous envoyez à partir de votre configuration de réécriture, afin que nous puissions voir ce qui pourrait se passer?

+0

Voici une copie/un collage verbatim, je teste avec des valeurs factices./foo,/foo /, et/foo/blah renvoient tous des erreurs de proxy plutôt que des 404 locaux. DocumentRoot/srv/proxytest RewriteEngine On RewriteRule ^/foo /(.+)$ http://remote.host/$1 [P, L] Quelle est la –

+0

erreur proxy? En ce moment, je soupçonne qu'Apache est aussi loin que de lire le P dans vos options, essayant d'initialiser sa communication avec mod_proxy, et de mourir avant de faire quoi que ce soit avec votre règle. – chaos

+0

Erreur de proxy Le serveur proxy a reçu une réponse non valide d'un serveur en amont. Le serveur proxy n'a pas pu gérer la requête GET/foo/blah. Raison: Échec de la recherche DNS pour: remote.host –

0

Je pense que je l'ai compris: quelque part, le nom par défaut est défini sur index.php, qui est ajouté en mode silencieux à ma réécriture.

sortie RewriteLog:

(2) init rewrite engine with requested uri /foo 
(3) applying pattern '^/foo(/.+)+$' to uri '/foo' 
(1) pass through /foo 
(2) init rewrite engine with requested uri /foo/ 
(3) applying pattern '^/foo(/.+)+$' to uri '/foo/' 
(1) pass through /foo/ 
(2) init rewrite engine with requested uri /foo/index.php 
(3) applying pattern '^/foo(/.+)+$' to uri '/foo/index.php' 
(2) rewrite '/foo/index.php' -> 'http://remote.host//index.php' 
(2) forcing proxy-throughput with http://remote.host//index.php 
(1) go-ahead with proxy request proxy:http://remote.host//index.php [OK] 
+0

Heh. Vérifiez les fichiers .htaccess. Cinq dollars dit que vous utilisez Wordpress. – chaos

+0

Pas de .htaccess, pas de Wordpress. Mais c'est une VM que j'utilise pour tester diverses choses, donc bien que j'ai enlevé tous les fichiers .conf non standard, il est toujours possible que quelque chose traîne et cause des problèmes. Merci pour l'aide! –

1

Vous aurez besoin d'échapper pour les deux premières conditions afin qu'ils ne les envoient pas tous hors de l'hôte distant. Essayez ceci:

RewriteEngine On 
RewriteRule ^foo$ /$1 [L] 
RewriteRule ^foo/$ /$1 [L] 
RewriteRule ^foo/([a-zA-Z0-9].*)$ http://example.com/$1 [L] 

règle vérifie d'abord la première condition d'être clairement /foo. Si c'est le cas, restez à la maison.

Le prochain test vérifie si ce n'est pas seulement /foo/. Si c'est le cas, restez local.

Le dernier test vérifie si vous avez quelque chose qui pend derrière une barre oblique, si c'est le cas, alors vous voulez probablement l'hôte distant et l'envoie là.