【htaccess】URLをwww有りに統一する方法

SEO対策として、URLをwww有りや無しに統一することはよくあります。

今回は「.htaccess」を使ってwww有りに統一する方法をメモしておきます。

htaccessでwww有りに統一する方法

<IfModule mod_rewrite.c>
RewriteEngine on
# www有りに統一
RewriteCond %{HTTP_HOST} ^lucklog\.info$
RewriteRule ^(.*)$ https://www.lucklog.info/$1 [R=301,L]
</IfModule>

↑こちらを「.htaccess」に追記して、赤字部分をリダイレクトしたいwww有りのドメインに置き換えてください。すると、URLをwww有りに統一できます。
※編集する際はバックアップしてからお試しください

実装は以上で完了となります。
以下、簡単にですが、一通り説明を書いておきますので、興味のある方はご覧ください。
※ちなみにメインは4、5行目です

1行目と7行目(IfModule)

<IfModule mod_rewrite.c>
・・・
</IfModule>

モジュール(mod_rewrite.c)が使える場合に「・・・」の処理を行います。言い換えると、モジュールが使えない場合は、「・・・」の処理は何も行われないということです。

基本的に「mod_rewrite」を利用できる環境がほとんどですが、サーバによっては利用できない場合もあるかもしれません。

もし動作しない場合は、「htaccessの設定ミス」または「モジュール(mod_rewrite.c)が使えない」が考えられます。htaccessに問題がなさそうな場合は、レンタルサーバやサーバ管理者にご確認ください。

2行目(RewriteEngine on)

RewriteEngine on

「mod_rewrite」を有効にします。

3、4行目(RewriteCond)

# www有りに統一
RewriteCond %{HTTP_HOST} ^lucklog\.info$

3行目はコメントです。

4行目は、アクセスしたURLのホスト名が「lucklog.info」で始まるならば、という処理になります。
※赤字部分は対応したいドメインに置き換える必要があります

各記号の説明をしますね。不要な方は5行目(RewriteRule)まで飛ばしてください。

RewriteCondとは?

RewriteCond %{HTTP_HOST} ^lucklog\.info$

RewriteCond」とは、半角スペース以降に条件(%{HTTP_HOST} ^lucklog\.info$)が書かれていて、その条件が満たされた場合に次の行の処理を行うという命令です。

%{HTTP_HOST}とは?

RewriteCond %{HTTP_HOST} ^lucklog\.info$

%{HTTP_HOST}とは「HTTP_HOST」という環境変数を使うための形です。「%{}」で囲むと環境変数の値を利用できます(環境変数は他にもいくつかあります)。

環境変数「HTTP_HOST」の値はURLのホスト名の部分です。このページの場合ですと、URLが「https://lucklog.info/htaccess-url-www-add」なので、「lucklog.info」となります。

ホスト名はどんな値?

「https://」~最初の「/」までの文字列がホスト名(HTTP_HOSTの値)になります。

例えば、URLが「https://lucklog.info/aaa」であれば、「lucklog.info」がホスト名、URLが「https://www.lucklog.info/aaa」であれば「www.lucklog.info」となります。
※phpで取得して確認しました

「¥」とは?(正規表現)

RewriteCond %{HTTP_HOST} ^lucklog\.info$

」はエスケープ文字です。「\.」は「.」という文字を指します。「.」のように文字以外の機能を持つ文字を文字として扱いときに「\.」のように文字の前にエスケープ文字を付けます

「^」とは?(正規表現)

RewriteCond %{HTTP_HOST} ^lucklog\.info$

^」は直後の文字が行の先頭にある場合にマッチします。よって、「^lucklog\.info」は先頭が「lucklog.info」で始まる文字列となります。

「$」とは?(正規表現)

RewriteCond %{HTTP_HOST} ^lucklog\.info$

$」は直前の文字が行の末尾にある場合にマッチします。よって、「lucklog\.info$」は末尾が「lucklog.info」である文字列となります。

上と合わせると、HTTP_HOST=lucklog.infoとなります。

5行目(RewriteRule)

RewriteRule ^(.*)$ https://www.lucklog.info/$1 [R=301,L]

アクセスしてきたURLの「~://lucklog.info/~」に対して、「://」の後ろに「www.」を付け足したURLにリダイレクトします。

本ページであれば、「https://lucklog.info/htaccess-url-www-add」でアクセスされた場合、「https://www.lucklog.info/htaccess-url-www-add」にリダイレクトされるということです。

以下各機能・記号の説明です。

RewriteRule
URL の書き換えを行います。1つ目のスペースの後の「条件パターン」に一致する URL を、2つ目のスペースの後の「置換文字列」で書き換えます。
「.」(正規表現)
任意の1文字
「*」(正規表現)
直前の文字が 0回以上 繰り返す
「.*」の場合、どんな文字列でもという意味
$1
パターン部分の一つ目の「()」の中の文字列を使います。

パターン部分とは、今回の場合だと「^(.*)$」となっている部分です。この1つ目の「()」内にはドメインより後ろの文字列がフルで入っています。
例をあげると「https://www.lucklog.info/htaccess-url-www-remove」であれば、「htaccess-url-www-remove」になります。
※ドメイン直後の「/」は含みません

[R=301,L]
R=301は、リダイレクトを行います。ちなみに、URL変更を伝えるので、今までのページの評価は落ちません
Lは、ここで終了という意味です。

まとめ

ゴチャゴチャと書きましたが、アクセスされたURLに「www」が付いていなかったら付け加えてリダイレクトするよということです。

<IfModule mod_rewrite.c>
RewriteEngine on
# www有りに統一
RewriteCond %{HTTP_HOST} ^lucklog\.info$
RewriteRule ^(.*)$ https://www.lucklog.info/$1 [R=301,L]
</IfModule>

こちらを「.htaccess」に追記して、赤字部分をリダイレクトしたいwww有りのドメインに置き換えれば、URLをwww有りに統一できますので、必要な方はコピペしてご利用くださいね。
※バックアップはお忘れなく

以上、誰かのお役に立てれば幸いです。