ページをリダイレクトさせる設定例|httpsページやトップページヘの転送【.htaccess】

.htaccess(ドットエイチティーアクセス)は、Apacheを用いたWebサーバーに、ディレクトリ単位で設置できる設定ファイル。
今回は、その.htaccessファイルを利用して、ページをリダイレクトさせる設定例となります。
【.htaccess】ページをリダイレクトさせる設定例
.htaccessには、変更する設定によってディレクティブと呼ばれる命令を記述します。また、.htaccessファイルは配置したディレクトリと、その サブディレクトリすべてに適用されます。
.htaccessでページをリダイレクトさせるには、リクエストURLの書き換えなどの設定ができる、mod_rewriteモジュールのディレクティブを利用します。
httpページをhttpsページへリダイレクトする例
以下、.htaccessに記述する構文の例となり、httpページをhttpsページへリダイレクトさせる設定となります。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
指定したページをトップページヘリダイレクトする例
以下、.htaccessに記述する構文の例となり、指定したページをトップページへリダイレクトさせる設定となります。
例では、次のいずれかの条件の場合にトップページへリダイレクトします。
- リクエストURL内に、/author/●●●が含まれる場合(●●●は、任意の文字数の文字)
- リクエストURLの末尾が、/page/0 の場合
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/author/.*$ [OR]
RewriteCond %{REQUEST_URI} ^/page/0$
RewriteRule .* https://%{HTTP_HOST} [R=301,L]
例で利用したサーバー変数について
上記構文内の%{HTTPS}、%{HTTP_HOST}、%{REQUEST_URI}は、サーバー変数となり、それぞれ以下の値を取得します。
- %{HTTPS}の値は、リクエストURLがSSL / TLSの場合はon 、それ以外の場合はoffとなります。
- %{HTTP_HOST}の値は、リクエストURLのドメイン名の部分となります。
- %{REQUEST_URI}の値は、リクエストURLのパス部分となります。
例で利用した以外のサーバ変数については、文末の参考サイト内を確認してみてください。
例で利用したmod_rewriteモジュールについて
以下、例で利用したmod_rewriteモジュールのディレクティブのまとめとなります。
RewriteEngineディレクティブ
RewriteEngineは、URLの書き換え処理の有効・無効を設定します。
RewriteEngineの引数
引数にon を設定すると有効となりoffを設定すると無効となります。また、デフォルト値はoffとなります。
RewriteCondディレクティブ
RewriteCondは、続けて記述したRewriteRuleを適用する条件を、文字列・正規表現・サーバ変数などで指定します。
また、RewriteCondを続けて記述した場合、RewriteCond同士の関係はAND条件となります。
RewriteCondの引数
RewriteCondでは、第1引数に指定した文字列などが、第2引数に指定したパターンを満たす場合に、続けて記述しているRewriteRule を適用します。
また、第3引数は任意でフラグを指定でき、パターンを満たす場合の条件を設定できます。
RewriteCondのフラグ
例で利用したRewriteCondのフラグは以下となります。
- OR フラグは、次に指定したRewriteCondとの関係をOR条件とします。OR フラグを指定しない場合はAND条件となります。
RewriteCondの詳細や、例で利用した以外のフラグについては、文末の参考サイト内を確認してみてください。
RewriteRuleディレクティブ
RewriteRuleは、リダイレクトさせる条件を文字列・正規表現・サーバ変数などで指定します。
また、複数のRewriteRuleを記述した場合、記述した順番に処理を実行します。
RewriteRuleの引数
RewriteRuleでは、リクエストURLが、第1引数に指定したパターンを満たす場合に、第2引数に指定したURLにリダイレクトします。
また、第3引数は任意でフラグを指定でき、リダイレクトに条件を設定できます。
RewriteRuleのフラグ
例で利用したRewriteRuleのフラグは以下となります。
- R=301 は、301リダイレクトの指定
- Lフラグは、現在のRewriteRuleが適用された場合に、そこで処理を停止。(以降のRewriteRuleは処理をしません)
思うようにリダイレクトされない場合
Lフラグを指定すると上記のように処理を停止するため、思うようにリダイレクトされない場合、原因がRewriteRuleの順序による可能性があります。
RewriteRuleの詳細や、例で利用した以外のフラグについては、文末の参考サイト内を確認してみてください。
その他のディレクティブについて
以上が例で利用したmod_rewriteのディレクティブとなります。その他のmod_rewriteのディレクティブについては、文末の参考サイト内を確認してみてください。