2010-08-18 10 views
0

Je ne comprends pas:Comment fonctionne RewriteRule?

Options +FollowSymlinks -MultiViews 
RewriteEngine on 
RewriteBase/

RewriteRule ^([a-z]+\-[0-9]+)/?$ $1/home/ [R] 
RewriteRule ^[a-z]+\-([0-9]+)/(home|alone)/?$ /$2.php?id=$1 [L] 
RewriteRule ^.*$ http://www.anotherdomain.com/ [R=301] 

pourquoi la dernière règle (et je veux dire la dernière redirection vers anotherdomain.com) toujours traitée ?.

je besoin de quelque chose comme ceci:

http://mydomain.com/some-344 ---> http://mydomain.com/some-344/home/ 
http://mydomain.com/some-344/ ---> http://mydomain.com/some-344/home/ 
http://mydomain.com/some-344/home/ ---> home.php?id=344 
http://mydomain.com/some-344/alone/ ---> alone.php?id=344 
http://mydomain.com/anythingelse... --> http://www.anotherdomain.com/ 

merci!

Répondre

0

La dernière règle est toujours traitée car ^.*$ correspondra toujours. Bien que vous ayez spécifié le drapeau L sur la deuxième règle, il s'agit probablement du doesn't work quite like you expect. C'est aussi une bonne idée de vous assurer que lors de la redirection vers un chemin local, vous incluez une barre oblique, et lors de la redirection en général, vous spécifiez l'indicateur L afin que la redirection se produise immédiatement. Actuellement, tout fonctionne bien, mais si vous regardez le traitement qui se passe sous le capot, il fait les choses un peu plus que nécessaire.

En ce qui concerne votre question réelle va, le conditionnement du fourre-tout rediriger en fonction de la demande initiale au serveur devrait vous obtenir ce que vous vouliez:

RewriteEngine on 
RewriteBase/

RewriteRule ^([a-z]+\-[0-9]+)/?$ /$1/home/ [R,L] 
RewriteRule ^[a-z]+\-([0-9]+)/(home|alone)/?$ /$2.php?id=$1 

RewriteCond %{THE_REQUEST} !^[A-Z]+\s/[a-z]+\-[0-9]+/(home|alone)/? 
RewriteRule ^.*$ http://www.anotherdomain.com/ [R=301,L] 
+0

Wow! cela fonctionne comme je m'y attendais !!!, merci pour les conseils. – coma