10

次のhtaccess書き換えルールがあります。ループを防ぐための1つのルール条件は、もともと次のように記述されています。

RewriteCond %{ENV:REDIRECT_STATUS} ^.

突然動作を停止してApacheにWebサイトのディレクトリリストを表示させるまでは、以前は正常に動作していました。

再び機能させるには、以下のリストのように、この新しいフォームに変更する必要がありました。

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]
4

1 に答える 1

8

ループを停止するには、次の条件があります。

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

これは、内部Apache変数をチェックすることによって機能します%{ENV:REDIRECT_STATUS}。この変数は、書き換えモジュールの開始時には空ですが、最初に内部書き換えが成功したときに200に設定されます。この上記の条件は、最初のリライトが成功した後、それ以上のリライトがベイルアウトし、ループが停止することを示しています。

于 2014-01-05T04:20:20.183 に答える