.htaccessを使用したリダイレクト(SEO対策)

※当サイトではアフィリエイト広告を利用しています。

SEO対策

前回書いた記事のリダイレクト部分を詳しく。
とりあえず書いたら動くけど、わかってないとちょっと気持ち悪いよね。

解説

下記のリダイレクトについて説明します。

  • http://→https://へリダイレクト
  • www.ありからwww.なしへリダイレクト
  • /index.htmlありから/index.htmlなしにリダイレクト
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]

リダイレクトは大きく分けて3つから成り立っています。

①書き換え開始の宣言

RewriteEngine on

書き換え開始の宣言です。
これを書くことで、リダイレクト機能を有効にします。

②実行条件の指定

RewriteCond

書き換えする条件(対象)を指定します。

③転送ルール

RewriteRule

転送先を指定します。

[R=301,L]

301リダイレクトをして処理を終了。

リダイレクトにはいくつか種類がありますが、とりあえずよく使う2つをご紹介。
301リダイレクト …… 恒久的(URLが変わったとき)
302リダイレクト …… 一時的(メンテナンスページなど)
※Rのみだと302リダイレクトになる。
L …… ここで処理終わり(LASTのL)

実行条件の指定について詳しく

次に実行条件の指定(RewriteCond)について詳しく見ていきたいと思います。

http://からリダイレクト

RewriteCond %{HTTPS} off 

httpsではない接続の場合にリダイレクト対象とする。

www.ありからリダイレクト

RewriteCond %{HTTP_HOST} ^www\.example\.com$

%{HTTP_HOST} …… HTTP_HOST(対象のドメイン)を参照
^ …… 文字の始まり
\. …… .を正規表現ではなく文字列として認識させる(\はエスケープ)
$ …… 文字の終わり

つまり、www.example.comで始まっているURLに接続した場合にリダイレクト対象とする。

/index.htmlありからリダイレクト

RewriteCond %{THE_REQUEST} ^.*/index.html

%{THE_REQUEST} …… THE_REQUEST(受け取っているURL)を参照
^……文字の始まり
.*……任意の文字列

つまり、なんちゃらかんちゃら/index.htmlで終わっているURLに接続した場合にリダイレクト対象とする。

転送ルールについて詳しく

次に転送ルールの指定(RewriteRule)について詳しく見ていきたいと思います。

https://へリダイレクト

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

^……文字の始まり
.*……任意の文字列
() …… グループ化
$ …… 文字の終わり
%{HTTP_HOST} …… HTTP_HOST(対象のドメイン)
%{REQUEST_URI} …… REQUEST_URI(対象のパス)

つまり、どこかしらにアクセスがあったらhttps://対象ドメインのどこかしらと同じパスに転送してくださいという意味。

URLではなくURIです!
この場合は対象のパスを参照しています。
URLとURIの違いは説明すると長くなるので割愛しますが、気になるようであればググってみてください。

www.なしへリダイレクト

RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

^……文字の始まり
.*……任意の文字列
() …… グループ化
$ …… 文字の終わり
$1 …… 後方参照

$1は後方参照です。
グループ化された任意の文字列の後方を参照しています。
例えば、www.example.com/example.htmlにアクセスがあった場合、https://example.com/example.htmlへリダイレクトします。

/index.htmlなしへリダイレクト

RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]

^……文字の始まり
.*……任意の文字列
() …… グループ化
$ …… 文字の終わり
$1 …… 後方参照

$1は後方参照、つまりグループ化された任意の文字列の後方を参照しているので、https://example.com/うんたら/かんたら/index.htmlにアクセスがあった場合、https://example.com/うんたら/かんたら/へリダイレクトします。

全部まとめて書くと

冒頭にも書きましたが、全部まとめて書くとこうなります。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]

小話

思いのほか記事が長くなった……。
正規表現ややこしいので、原理だけわかってたらコピペが簡単だなぁと改めて思いました。

コメント

タイトルとURLをコピーしました