2010-08-18 85 views
0

我只是不明白这一点: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] 

为什么是最后一个规则(按姓氏我的意思是重定向anotherdomain.com)总是被处理?

我需要的是这样的:

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/ 

的感谢!

回答

0

总是处理最后一条规则,因为^.*$将始终匹配。当您在第二条规则中指定L标志时,它可能是doesn't work quite like you expect

确定何时重定向到本地路径,包括一个前导斜杠以及一般重定向时,指定L标志以便立即发生重定向也是一个好主意。目前,这一切都行得通,但如果你看看引擎盖下正在进行的处理,它会让事情变得混乱不堪。

至于你的实际问题去,调理包罗万象的在原有基础上向服务器发出请求应该得到你想要的东西重定向:

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

哇!这工作正如我预期的!!!,谢谢你的提示。 – coma 2010-08-18 15:33:37