Подтвердить что ты не робот

Условие Apache mod_rewrite REDIRECT_STATUS, вызывающее список каталогов

У меня есть следующие правила перезаписи htaccess. Условие одного правила для предотвращения цикла было изначально написано следующим образом:

RewriteCond %{ENV:REDIRECT_STATUS} ^.

Он работал очень хорошо, пока он не прекратил работу, в результате чего Apache отобразил список каталогов на веб-сайте.

Мне пришлось изменить его на эту новую форму, как в приведенном ниже списке, чтобы она снова работала:

RewriteCond %{ENV:REDIRECT_STATUS} 200

Есть ли у вас какое-либо представление о причине такого поведения?

Спасибо

RewriteEngine on
RewriteBase /

## Permanent 301

## Force to www. Un-comment in production.
RewriteCond %{HTTP_HOST} !^www\.myhost\.com [NC]
RewriteRule ^(.*) http://www.myhost.com/$1 [L,R=301]

## Permanent redirect rules for contents

RewriteRule ^argument/programming/?$ tags/programming [NC,L,R=301]

## Internal Redirect Loop Protection
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

## Maintenance page
#RewriteRule (.*) special/maintenance.html

## Specials
RewriteRule special/(.*) special/$1 [NC,L]

## Static resources
RewriteRule ^(.*\.(js|ico|gif|jpg|png|css|rss|xml|htm|html|pdf|zip|gz|txt))$ public/$1 [NC,L]

## Front Controller
RewriteRule ^(.*) public/index.php [NC,L]
4b9b3361

Ответ 1

У вас есть это условие, чтобы остановить цикл:

## Internal Redirect Loop Protection
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

Это работает, проверяя внутреннюю переменную Apache %{ENV:REDIRECT_STATUS}. Эта переменная пуста в начале модуля перезаписи, но установлена ​​на 200 при первой успешной внутренней перезаписи. Это вышеописанное условие говорит о спасении от дальнейших перезаписываний после первого успешного переписывания и остановки цикла.