サイト移転したから旧サイトから新サイトに飛ばしたい!
URLを正規化したい!
こんな時こそ出番ですリダイレクト!
リダイレクトとは、特定のページへアクセスすると、強制的に別ページへ転送する処理のことです。
この記事では、コピペでOKなリダイレクトの記述紹介から、記述の解説まで行います。
特にURLの正規化は、SEO的観点からもセキュリティ面でも絶対にやっておきたいです!
URLの正規化とは、同じページに対して複数存在するURLを、1つにまとめる(指定した1ヶ所へ転送させる)ことです。
http://にアクセスできてしまったら、SSL化した意味がないですね!
どうやってリダイレクトするの?
リダイレクトの記述は、「.htaccess」というファイルに記述していきます。
基本的にはサンプルコードをコピペしてURLを書き換えるだけでOK
ですが.htaccessの扱いに注意が必要です。
.htaccessに慣れている方は次の見出しまで飛ばしてOK
慣れていない方は、くれぐれも読み飛ばさないようお願いします。
.htaccessは、契約したサーバーによって扱い方が異なったり、できる処理とできない処理があったり、いろいろと制約があります。
むやみに触ってしまうと、画面真っ白、顔面蒼白になることもあります。
この辺については数行で語れない大切なことなので、別の記事で紹介しています。
リダイレクトの基本的な記述
リダイレクトの基本的な記述は以下になります。
RewriteEngine on
RewriteBase /
RewriteCond A B
RewriteRule C D [R=301,L]
それでは、1行ずつ見ていきましょう。
RewriteEngine on
「リダイレクトをしますよ。」と宣言しています。このまま使います。
RewriteBase /
リダイレクトの基準となるURLのパスを指定しています。
基本的にはこのまま使います。
この行を省略すると、.htaccessを設置したディレクトリが基準になります。
RewriteCond A B
「もしAがBなら実行していください。」と条件を指定する部分。
AとBは後ほど適切なものに書き換えていきます。
特に条件がなければこの行は省いてもOK
RewriteRule C D [R=301,L]
「CからDへ転送してください。」と宣言しています。
CとDも後ほど適切なものに書き換えていきます。
[R=301,L]はおまじないのようなものだと思ってください。
つまり全体を日本語に訳すと
AがBであれば、CをDに転送します
となります。
それではいざ、それぞれのリダイレクトを見ていきましょう!
[R=301]は301リダイレクトのことで、[L]はリダイレクト終了のサインです。この2つをあわせて[R=301,L]と書くお約束ごとです。
リダイレクト記述方法まとめ①
目的にあったリダイレクトの方法をコード付きで紹介していきます。
全てドメインはefilamola.comにしているので、そこは各自適切なドメインに変更してください!
https(SSL化)のURLに統一する
http://efilamola.com → https://efilamola.com
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond A Bで、「AがBならば」という条件を指していましたね!
今回は%{HTTPS} offなので、「%{HTTPS}がoffならば」という条件です。
かんたんに言うと、SSL化されていない場合という意味になります。
RewriteRule C Dは、「CからDへ転送」つまりリダイレクトのことでした!
Cの^(.*)$は正規表現というものです。
とりあえず^(.*)$は、転送前のウェブサイト全ページだと思ってください。
記事の最後のほうで、正規表現について少しだけ触れています。
Dも何やら難しいですね。
%{HTTP_HOST}は、転送前のドメインを指します。
%{REQUEST_URI}は、転送前のドメイン以降を指します。
少し分かりにくいと思うので図で見てみましょう!

転送前であるCの部分に「http://efilamola.com」の記述がないのは、RewriteBase /によって既に定められているためです!
逆に転送後であるDの部分は、httpsから記述が必要になります。
wwwありかなしで統一する
wwwなしで統一する
https://www.efilamola.com → https://efilamola.com
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.efilamola\.com$
RewriteRule ^(.*)$ https://efilamola.com%{REQUEST_URI} [R=301,L]
正規表現において.(ドット)は「何かしらの文字」という特殊な意味を持っています。
そのため、「www.efilamola.com」の.を、通常のドットマークと認識してくれません。
.の前に\(バックスラッシュ)を置いて「\.」とすることで、通常のドットマークと認識してもらえるのです。
もし.co.jpの場合だと「www\.efilamola\.co\.jp」となります!
なお転送後のURLに\がないのは、転送先は正規表現を使っていないからです。
wwwありで統一する
https://efilamola.com → https://www.efilamola.com
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^efilamola\.com$
RewriteRule ^(.*)$ https://www.efilamola.com%{REQUEST_URI} [R=301,L]
index.htmlをなしにする
https://efilamola.com/index.html → https://efilamola.com/
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*/index\.html$
RewriteRule ^(.*)index.html$ https://efilamola.com/$1 [R=301,L]
別ドメインへリダイレクトする(サイト移転)
https://efilamola.com → https://新サイトのドメイン
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^efilamola\.com
RewriteRule ^(.*)$ https://新サイトのドメイン/$1 [R=301,L]
$1は、正規表現で使った()内の変数となります。
つまりここでは「$1 = .*」となっています。
.*については正規表現の項目で紹介しています。
リダイレクト記述方法まとめ②
特定のディレクトリだけをリダイレクトする
https://efilamola.com/旧ディレクトリ
→ https://efilamola.com/新ディレクトリ
RewriteEngine on
RewriteBase /
RewriteRule ^旧ディレクトリ(.*)$ /新ディレクトリ$1 [R=301,L]
特定のページだけをリダイレクトする
https://efilamola.com/旧ページ.html
→ https://efilamola.com/新ページ.html
RewriteEngine on
RewriteBase /
RewriteRule ^旧ページ.html$ /新ページ.html [R=301,L]
特定のディレクトリをリダイレクトから除外する
除外ディレクトリ以外の全ページ → https://efilamola.com
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(^/除外ディレクトリ/)
RewriteRule ^(.*)$ https://efilamola.com [R=301,L]
!(^/除外ディレクトリ/)の!は、否定の意味があります。
※正規表現ではありません。
そのため、「除外ディレクトリ以外の場合」という条件になります。
複数のリダイレクト処理をまとめる方法
複数のリダイレクト処理を行いたい場合、記述をある程度まとめることができます。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*/index\.html$
RewriteRule ^(.*)index.html$ https://efilamola.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.efilamola\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://efilamola.com%{REQUEST_URI} [R=301,L]
RewriteEngine onとRewriteBase /は、一度だけ記述すればOK!
5行目6行目がRewriteCondですが、条件は[OR]を使うことで繋げることができます。
wwwあり、もしくはhttp:://の場合、https://efilamola.comに転送するというようになっています。
リダイレクトでよく使う正規表現
.htaccessでのリダイレクトの際によく使う正規表現を紹介します。
. | 何でも良い、何かしら1文字 |
●* | ●を0回以上繰り返す |
^● | ●から始まる |
●$ | ●で終わる |
\● ¥● | .など正規表現で特殊な意味を持った文字を、通常の文字として扱う |
$1 | (●)とすでに記述が合った場合、かっこ内の変数となる |
これらは正規表現の中でもほんの一部にすぎないのですが、リダイレクト関連はこれだけ知っておけば問題ありません。
それぞれを組み合わせてみましょう!
.* → 何かしらの文字を0回以上繰り返している
^(.*)$ → 上と同じですが、.*を後から$1として使うことができます
^efilamola\.com$
→ efilamola.comで始まり、efilamola.comで終わる
= efilamola.com