.htaccess RewriteCond - PullRequest
       5

.htaccess RewriteCond

1 голос
/ 07 октября 2011

Это правило прекрасно работает в файле .htaccess:

ErrorDocument 403 /AccessDenied.html
ErrorDocument 404 /NotFound.html
RewriteEngine on
RewriteBase /
RewriteRule ^(index(\.(html|htm))?)$ / [R]

То же правило, написанное как условное, не работает:

ErrorDocument 403 /AccessDenied.html
ErrorDocument 404 /NotFound.html
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^(index(\.(html|htm))?)$
RewriteRule ^(index(\.(html|htm))?)$ / [R]

Полагаю, мой вопрос таков: почему правило работает в первом сценарии, а не во втором? И как я могу это исправить?

1 Ответ

3 голосов
/ 07 октября 2011

Я считаю, что ваша проблема в том, что обработка RewriteBase (которая всегда удаляет начальную косую черту) не влияет на переменные типа %{REQUEST_URI} и не применяется для обработки RewriteCond в любом случае.

Таким образом, шаблон ^(index(\.(html|htm))?)$ будет нормально работать в RewriteRule, но не RewriteCond, совпадающем с URI запроса. Вы должны включить этот ведущий слеш (по крайней мере, если вы используете начальный ^ якорь):

RewriteCond %{REQUEST_URI} ^/(index(\.(html|htm))?)$
...