htaccessのリダイレクトの徹底解剖、今回は2回目となります。
前回でhtaccessのリダイレクトの簡単な仕組み・使い方を説明しました。
今回は、より高度なリダイレクトの方法について解説します。
●1. 特定のIPアドレスだけリダイレクトさせる、条件付きリダイレクト
htaccessでは、特定の条件に基づいてリダイレクトを行うことができます。例えば、特定のIPアドレスからのアクセスをリダイレクトする場合などです。
例)IPアドレス172.19.0.1からのアクセスをexample.comにリダイレクトする場合
RewriteEngine On
RewriteCond %{REMOTE_ADDR} 172\.19\.0\.1
RewriteRule ^(.*)$ http://examole.com/ [R=302,L]
この例では、特定のIPアドレスからのアクセスをhttp://test.com/にリダイレクトしています。
では逆に、IPアドレス172.19.0.2以外からのアクセスをリダイレクトさせる場合です。
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !172\.19\.0\.2
RewriteRule ^(.*)$ http://test.com/ [R=302,L]
アドレスの前に「!」を付けることで、指定したIPアドレス以外からのアクセスをリダイレクトすることができます。
●2. クエリストリングを保持したリダイレクト
クエリストリングを保持したままリダイレクトを行う場合
クエリストリングとは、要するにURLのGET部分の事です。
のような形のURLで、?以降の部分がクエリストリングです。
「?param1=value1¶m2=value2」
の部分
この「?」以降の部分を保持したままリダイレクトを行うには、特別な設定が必要となります。
まずあえて「?」以降を付けて、クエリストリングの指定をしないままリダイレクトさせてみます。
htaccessは以下のように設定します。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteRule ^(.*)$ http://test.com/?a=test [R=302,L]
そしてアクセスするURLは以下のようにします。
この場合、リダイレクト後のURLは以下のようになります。
クエリストリングが保持されていないことがわかります。
それでは今度は、クエリストリングを保持したままリダイレクトを行う設定をしてみます。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteRule ^(.*)$ http://test.com/?a=test [R=302,QSA,L]
この例では、oldpage.htmlへのアクセスをnewpage.htmlにリダイレクトし、クエリストリングも保持します。
遷移先はこうなります。
GETパラメータを引き継いでいる事がわかります。
●3. ドメイン全体のリダイレクト ドメイン全体を別のドメインにリダイレクトする場合、以下のように設定します。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [NC]
RewriteRule ^(.*)$ http://newdomain.com/$1 [R=301,L]
この例では、olddomain.comへのアクセスをnewdomain.comにリダイレクトしています。
●4. HTTPSへのリダイレクト HTTPSへのリダイレクトを強制する場合、以下のように設定します。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
この例では、HTTPでのアクセスをHTTPSにリダイレクトしています。
●まとめ
今回は、htaccessのリダイレクトの高度な使い方について解説しました。
条件付きリダイレクト、クエリストリングの保持、ドメイン全体のリダイレクト、HTTPSへのリダイレクトなど、
様々なシナリオに対応できる方法を紹介しました。
これらのテクニックを活用して、より柔軟で効果的なリダイレクト設定を行ってください。
次回も引き続き、htaccessの便利な機能について解説していきますので、お楽しみに!

コメント