2010-08-18 82 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