2012-06-11 36 views
0

我在htaccess文件中有一些重写规则。我仍然深入研究,所以我不确定一些事情。 基本上我想要的所有页面(除/注册页面)重写这样的:http://www.example.com/about - >http://www.example.com?page=about需要覆盖以前编写的重写规则

要获得正确的,我写这条规则:

RewriteRule ^([a-z-_1-9]+)+/?$ ./?page=$1&%{QUERY_STRING} [L] 

然后我写了下面这条规则一个以上的认为它会覆盖它,但它不...

RewriteRule ^register/?$ ./?page=login&option=register 

所以要去/寄存器给了我404。但是,如果我注释掉的第一个规则,然后注册页面的作品。 我认为它会像CSS一样工作,在这里写一个新的规则将优先。 我如何得到这个权利,你如何覆盖以前编写的重写规则?

谢谢!

+1

您已设置'[L]'这使得该规则的最后一条规则是否匹配来执行。任何后续的规则都将被忽略。 – Tomalak

+0

感谢您的快速回复。我拿走了[L],但仍然存在相同的问题 – uguMark

+1

由于您的第二条规则比第一条更具体,因此您应该更换它们。 '^ register /?$'应该是第一个被测试的,你也可以把'[L]'加到那个。 – Tomalak

回答

2

.htaccess不是CSS - 特别是当涉及到mod_rewrite指令/规则时。

规则从上到下执行。因此 - 在顶部放置了更具体的规则,然后在底部放置了更通用的

你的情况:

RewriteRule ^register/?$ ./?page=login&option=register [L] 
RewriteRule ^([a-z-_1-9]+)+/?$ ./?page=$1&%{QUERY_STRING} [L] 
+0

啊,谢谢!这就是你说的 – uguMark