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


Htaccess RewriteRule не работает должным образом

Я использую 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

Попробуйте добавить маркеры начала и конца^$.

RewriteRule ^/книги/(. )/(.) $ PHP/booksByLanguage.php? Крышка = $ 2

Таким образом, ваш первый правило обыкновение быть вызваны для list_books матчей.

+0

+1 правильно распознал проблему, -1 решение, вероятно, не будет работать из-за структуры сайта, +1 для effoert. сумма: +1 – 2010-12-16 09:38:12

+0

:) Я ценю разъяснение ваших трех кликов. Я подозреваю, что это даст правеенмон над горбом для этой конкретной проблемы. – 2010-12-16 09:44:29

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 

если это ваш корневой уровень вам необходимо включить начало слэш, а его часть запроса, но я не могу сказать вам, что, не зная вашей структуры.

Смежные вопросы