2010-12-16 150 views
0
RewriteEngine On 
RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2 
RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2 


htaccess的重写规则工作不正常

我使用htaccess的重写URL(以上是我使用的代码)

问题是所述第二线(RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2)工作不正常。即,


第二线将正常工作,当我评论的第一行(RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2

下面的代码工作正常

RewriteEngine On 
    #RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2 
    RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2 


我想这两个规则为我工作。

回答

2

尝试添加开始和结束标记^ $。

重写规则^ /书籍/()/()$ PHP/booksByLanguage.php?盖= $ 16

这样,你的第一条规则不会被触发list_books匹配。

+0

+1正确识别问题,-1解决方案可能因为网站结构不起作用, +1。总结:+1 – 2010-12-16 09:38:12

+0

:)我很感谢你对三次点击的澄清。我怀疑这会在这个特殊问题上得到赞扬。 – 2010-12-16 09:44:29

+0

谢谢你们,队长你的回答对我有效。 @joe我不明白你说了什么,我是新来的。任何方式,我标记这个答案被接受,并提出“这个答案是有用的”为2. – praveenmon 2010-12-16 10:04:18

2

问题是:您没有定义以^开头的行。 所以第一条规则将永远匹配,如果第二条也匹配。 ,因为它只需要匹配字符串。例如:

books.*将匹配booksshelf以及mybookshelf ^books.*将只匹配bookshelf

RewriteEngine On 
RewriteRule list_books/(.+)/(.+)$ php/listBooks.php?cat_id=$2 [L] 
RewriteRule books/(.+)/(.+)$ php/booksByLanguage.php?lid=$2 

这应该工作,但不漂亮。 事情是当第一条规则(在更新的代码中)匹配时,第二条规则也是如此。但不是相反的。

所以我把它放在上面,并设置最后一个开关[L],这样以后就不会执行其他规则。

但这是错误的方式!

你应该定义你的重写规则,以便它们只匹配你想要的!

我不知道您的结构,所以这可能不行,但我能想象像下面这样:

RewriteEngine On 
RewriteRule ^/list_books/(.+)/(.+)$ php/listBooks.php?cat_id=$2 
RewriteRule ^/books/(.+)/(.+)$ php/booksByLanguage.php?lid=$2 

,如果这是你的根水平,你需要包括开始削减,作为它的部分请求,但我不能告诉你,不知道你的结构。

+0

乔你的答案也是正确的。十分感谢。乌尔详细的答案是伟大的。还有一个问题,我可以如何解决这个问题。我不能在这里看到任何关闭按钮。 – praveenmon 2010-12-16 10:06:25

+0

您的questin通过接受答案而“关闭”。关闭的问题只能由拥有足够声誉的成员投了几票,而且只能用于坏的或无用的问题。 – 2010-12-18 20:56:36