プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
.htaccessのRewriteRuleによる無限ループ(リダイレクトループ)を回避する
結論から書いておきます。
やり方はいろいろあるでしょうが、今回はリダイレクト先をRewrite対象外とすることで対処しました。

例えば

RewriteEngine on
RewriteCond %{REQUEST_URI} !(hoge\.html)
RewriteRule ^(.*)$ /hoge.html [R,L]

のような形ですね。

それでは、詳細を書いていきます。

.htaccessを使って、特定のIPアドレスからのアクセスを拒否したくてですね。
単純に拒否するだけであれば

deny from 198.51.100.2

のように書けば良いのですが、今回は特定のページを表示したかったのです。
そこで、以下のように書きました。

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^198\.51\.100\.2$
RewriteRule .* /deny.html [L]

「198.51.100.2」からのアクセスであれば「deny.html」にリダイレクトする指定です。

これで、よし!

……と思ったら、ダメでした。
Google Chromeさんに

このウェブページにはリダイレクト ループが含まれています

とか怒られてしまったのです。
あれ?無限ループしてる(--?

……してました。

「198.51.100.2」からの全アクセスを「deny.html」にリダイレクトしていますからね。
「deny.html」に対するアクセスも「deny.html」にリダイレクトされちゃうのです。

こりゃ、困ったね。

ということで、無限ループを回避することにしました。
やったのは単純に「deny.htmlへのアクセスはリダイレクトしない」条件を追加するだけです。
例えば、こんな感じφ(--)

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^198\.51\.100\.2$
RewriteCond %{REQUEST_URI} !(deny\.html)
RewriteRule .* /deny.html [L]

REQUEST_URIに「deny.html」が含まれていないときが対象だよ!と追加指定しています。

これで無事に、無限ループは回避されました。

まぁ、他にもやり方はいろいろあると思いますけどね。
お手軽な回避方法の一例として、書いてみました。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● 環境設定関連  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事