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

관련 문제