Mod rewrite 重写规则是如何工作的?

Mod rewrite 重写规则是如何工作的?,mod-rewrite,Mod Rewrite,我就是不明白: 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] 为什么总是处理最

我就是不明白:

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/

谢谢

始终处理最后一条规则,因为
^.*$
将始终匹配。虽然您已经在第二条规则中指定了
L
标志,但它可能是

在重定向到本地路径时,最好确保包含一个前导斜杠,并且在一般情况下重定向时,指定
L
标志,以便立即重定向。目前,一切正常,但如果你看看引擎盖下正在进行的处理,它做的事情比必要的要混乱一些

就您的实际问题而言,根据对服务器的原始请求调整catch-all重定向应该可以满足您的需要:

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]