RewriteRule не работает, когда должен, почему? - PullRequest
1 голос
/ 19 марта 2012

Я хочу чистые URL, и мой RewriteRule выглядит так:

RewriteRule ^articles/([A-Z0-9-]+) /articles/index.php?slug=$1&%{QUERY_STRING} [PT,L]

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

RewriteRule ^articles/([A-Za-z0-9-]+) /articles/index.php?slug=$1&%{QUERY_STRING} [PT,L]

... тогда я получаю внутреннюю проблему с сервером. Журнал ошибок apache гласит:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

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

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Проблема в вашем шаблоне: у него нет конечного символа ($).

Поэтому, когда вы вызываете /articles/index.php ..., он совпадает из-за / article / index,Следовательно, цикл перенаправления.

Если вы измените свой шаблон следующим образом:

RewriteRule ^articles/([A-Za-z0-9-]+)$ ...

Это сработает, потому что символ точки (.) Не будет совпадать.

0 голосов
/ 19 марта 2012

Также

Вы используете ...&%{QUERY_STRING}.Если нет строки запроса, вы получите ...&, который может выглядеть как пустой лишний параметр для того, что обрабатывает URL.

mod_rewrite имеет специальную обработку строк запроса, поэтому вам это не нужно,Если вы добавите флаг [QSA], это означает, что любой материал строки запроса, добавленный вами при перезаписи (обозначенный ?), будет распознан и объединен с существующей строкой запроса.

...