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]の条件にマッチするので処理終了
これで、無限ループから抜け出せました。
えがった。えがった。
[…] 詳しくは、下記を参照ください。 http://www.kurobuti.com/blog/?p=2912 事例11.ECCUBEのログインで発生 ECCUBEでは、管理画面の […]