RewriteEngine On
RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2
RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2
我正在使用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
我希望这两条规则都适合我。
答案 0 :(得分:2)
尝试添加开始和结束标记^ $。
RewriteRule ^ / books /(。)/(。)$ PHP / booksByLanguage.php?盖= $ 16
这样就不会为list_books匹配触发你的第一条规则。
答案 1 :(得分: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
如果这是你的根级别,你需要包括起始斜杠,作为请求的一部分,但我不能告诉你不知道你的结构。