mod_rewrite проблема RewriteCond - PullRequest
       7

mod_rewrite проблема RewriteCond

0 голосов
/ 17 ноября 2010

В моем файле .htaccess у меня есть следующие правила:

RewriteEngine on
RewriteBase /myblog.com/        
RewriteRule ^author/([^/]*)/?([^/]*)/?$ blog/author.php?author=$1&contactid=$2 [L]
       RewriteRule ^blog/([^/]*[^/index.php])/?([^/]*)/?([^/]*)/?$ blog/index.php blog=$1&category=$2&article=$3 [L]

Моя проблема в том, что такой запрос myblog.com/author/Jim+Jones/28 перенаправляется на следующее правило:хотя там у меня есть флаг [L]?

Как я могу исключить второе правило из стрельбы, когда в URL появляется "/ author /"?

Большое спасибо, Джейсон

1 Ответ

0 голосов
/ 17 ноября 2010

/ author / Jim + Jones / 28 не должны попадаться ни одним из них, поскольку ни одно из ваших правил не перехватывает URL-адреса, начинающиеся с /, а символ ^ в начале вашего регулярного выражения явно указывает, что для первого правила он должен начните с 'author /' (примечание нет / в начале).

UPDATE: Я думаю, что происходит, что запросы вроде myblog.com/author/Jim+Jones/28 переписываются дважды. Сначала по первому правилу, а затем по второму. Если это так, вам нужно сделать второе правило более ограничительным. Не позволяйте ему переписывать запросы, например, с author.php.

ОБНОВЛЕНИЕ 2: Хорошо, так что, вероятно, было бы лучше всего в вашем случае добавить условие для второго предложения:

RewriteEngine on
RewriteBase /myblog.com/        
RewriteRule ^author/([^/]*)/?([^/]*)/?$ blog/author.php?author=$1&contactid=$2 [L]

RewriteCond %{THE_REQUEST} !(author\.php)
RewriteRule ^blog/([^/]*[^/index.php])/?([^/]*)/?([^/]*)/?$ blog/index.php?blog=$1&category=$2&article=$3 [L]
...