ApacheのRewrite無限ループでハマってしまいました・・・orz

取りあえず、無限ループから抜ける方法が分かったので、その備忘録です。

無限ループ設定(VirtualHost例)

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /var/www/html
    ServerName www.example.co.jp
    ErrorLog logs/www.example-error_log
    CustomLog logs/www.example-access_log common
    RewriteEngine on
    RewriteCond %{SERVER_ADDR} (.*)
    RewriteRule ^/(.*)$ http://www.example.co.jp/? [R]
</VirtualHost>

上記の設定では、IPアドレスでアクセスしてきた場合は、「http://www.example.co.jp/」へリダイレクトします。

しかし、私の一部環境では、無限ループに陥ってしまいブラウザで表示できなかったため以下の設定に変更しました。

無限ループ脱出設定(VirtualHost例)
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /var/www/html
    ServerName www.example.co.jp
    ErrorLog logs/www.example-error_log
    CustomLog logs/www.example-access_log common
    RewriteEngine on
    RewriteCond %{SERVER_ADDR} (.*)
    RewriteRule http://www.example.co.jp/ - [L] ← 追加
    RewriteRule ^/(.*)$ http://www.example.co.jp/? [R]
</VirtualHost>

[L]は、[L]で設定している条件に当てはまった場合は、それ以降の条件では比較しないと言うことです。
(簡単に言うと[L]の条件にマッチしたらそこでリダイレクトの処理終了)

簡単な説明

①IPアドレスで接続してきたら「http://www.example.co.jp/」へリダイレクトする。
②リダイレクト後、再度Rewriteの条件を上から評価していき[L]の条件にマッチするので処理終了

これで、無限ループから抜け出せました。

えがった。えがった。


10月 27, 2010 at 9:53 pm by 黒ぶちメガネ
Category: Apache, Linux