今日は「.htaccess」の最初にしておきたいリダイレクト設定を紹介します。
ただ、書いてあるものをコピペしていても何が何だかわからないと思うので、
「それを記述することなんのメリットがあるのか」や「その記述の意味」について初心者の方にわかりやすく紹介します!
- これは押さえておこう! リダイレクトの「基本構文」
- その1:セキュリティ対策に有効? ”https”へリダイレクトさせる方法
- その2:二重インデックスに注意? ”www”の有無を設定する方法
- その3:これも二重インデックスに有効? index.html(php)をなくす方法
- 3つをまとめてやってみよう!
これは押さえておこう! リダイレクトの「基本構文」
まずはリダイレクトの基本構文を押さえておきましょう。
それがこちら
RewriteEngine On
RewriteCond 条件・ルール
RewriteRule パターン 置き換え対象
この3行だけなのです!
処理としては下の2行だけで大丈夫です。
まずはこの
RewriteEngine On
とは、「今からURLの書き換えを行いますよ!」という意味です。
ここから処理が始まります。
RewriteCond 条件・ルール
とはこの次にある”RewriteRule”に対してルールを指定しています。
「この時にはこうするよ!」という条件を指定します。
そして3行目の
RewriteRule パターン 置き換え対象
とは「これに書き換えるよ!」と実際に処理を行う一文です。
さて、これらを元に、実際にリダイレクトしてみましょう!
その1:セキュリティ対策に有効? ”https”へリダイレクトさせる方法

まずは”http”へアクセスされた時に”https”へリダイレクトする方法を紹介します。
それは以下の3行です
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://tashumist.com [R=301,L]
そして、
RewriteCond %{HTTPS} off
とは、先に述べたように、この次にある”RewriteRule”に対してルールを指定しています。
「この時にはこうするよ!」という条件を指定します。
するとここでは、
「httpsがoffの場合」、「httpsでない場合」ということになります。
この条件が満たされるとその下の”RewriteRule”が処理されます。
そして最後の
RewriteRule ^(.*)$ https://tashumist.com [R,L]
とは「記述したURLにリダイレクトする」という意味です。
“^(.)$”という、かわいい絵文字のようなものは「正規表現」と言います。
“^[文字]”で「行頭」を表します。
“.”は「任意の一文字」、”“は「0回以上の繰り返し」、
“$”は「行末」であることを示しています。
つまり”^(.*)$”は「任意の一文字が0回以上繰り返している文字列(繰り返さなくても)」つまり「文字列ならなんでも」ということになります。
それを”RewriteRule”、つまり、書き換えます。
ここでは「文字列ならなんでも」を「https://tashumist.com」に書き換えるということになります。
その後の”[R=301,L]”は”R”はリダイレクト、”L”は「LAST」、「今している処理を終了」を表します。
この”R”には”=301″を付け加えることで、サイトのリダイレクトが一時的でなく、「恒久的に」行われるようになり、変更前からGoogleからの評価を引き継ぐために必要になります。
以上で”http”から”https”へのリダイレクト設定が完了です。
その2:重複コンテンツに注意? ”www”の有無を設定する方法

次に”www”の有無を設定する方法について紹介します。
この”www”というのはURLの”https://”の次にくるもののことです。
例えば、このサイトだと、
https://www.tashumist.com
とwwwをつけることもできます。(このサイトはwwwをつけてアクセスするとwwwなしにリダイレクトされます)
そもそもなぜ、wwwの有無を設定するのかというと、
何も設定していないサイトは「wwwあり」でも「wwwなし」でも接続できます。
そうすると、人間から見ると一つのサイトに見えているものが、wwwがあるものでもないものでもアクセスできてしまう。
つまりGoogleなどからはそのサイトが「2つある」と認識されてしまいます。
しかも、どちらも同じことを書いているし、形、デザインなども同じなので、Googleなどからの評価が分散されることになります。
するとSEO的に、本当は100PVあるサイトでもwwwがあるサイトとないサイトに50ずつのアクセスになったりと、分散されてしまいます。
また、最悪の場合、同じサイトが二つあるということはコンテンツが「重複している」と認識されてしまい、
どちらかのページが「パクリサイト」だと認識されてしまい、ペナルティを受けてしまう可能性もあります。
なので、この設定はきちんとしておいたほうがいいでしょう。
長々とお話ししてしまいましたが、www有無の設定方法は以下です。
#wwwありにリダイレクト
RewriteEngine On
RewriteCond %{HTTP_HOST} ^tashumist.com
RewriteRule (.*) http://www.tashumist.com/$1 [R=301,L]
wwwなしにリダイレクト
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.tashumist.com
RewriteRule (.*) http://tashumist.com/$1 [R=301,L]
これで完了です。
構文についての詳細は先に述べたので省くことにします。
その3:これも重複コンテンツに有効? index.html(php)をなくす方法

もう一つ、Googleに重複コンテンツとして認識されてしまう可能性があるもの。
それが、”index.html(php)”の有無です。
“index.html(php)”はいわゆる「そのディレクトリ内のトップページ」に使われることが多いページです。
Webサイトは全てディレクトリ(フォルダ)とファイルで構成されています。
あなたのパソコンと同じです。「Webページ=ファイル」です。
感覚的に言うとWebページは「パソコンの中のファイルをみんなで見られるようにしている」といった感じですかね。
そのファイルにアクセスするための住所の文字列がURLなのです。
URLで”https://tashumist.com/”にアクセスするとトップページを表示させることができます。
最後の”/”はディレクトリ(フォルダ)を表しており、ドメイン(ここでは”tashumist.com”)のすぐ後につく”/”は「ルートディレクトリ」と呼ばれています。
このルートディレクトリには様々なファイルが置かれています。
その中でも一つ「このファイル名は書かなくてもわかるよね?」というファイルがあります。
それが”index.html”ファイルです。(PHPで構成されているものは”index.php”であることが多いです。)
このファイルにアクセスするのに”index.html(php)”を書いても書かなくてもアクセスできてしまうのです。
しかし!それが、SEOでの評価や重複コンテンツの問題となってしまうのです。
wwwの有無と同じように”index.html(php)”があるページとないページの二つが存在してしまうことになるのです。
そこでindex.html(php)を省く処理が必要になります。それが以下です。
RewriteEngine on
RewriteCond %{THE_REQUEST} ^./index.(html|php) RewriteRule ^(.)index(html|php)$ http://tashumist.com/$1 [R=301,L]
構文は先に述べたものとほとんど一緒になります。
index.phpの場合はhtmlの部分をphpに変えていただければOKです。
3つをまとめてやってみよう!
以上が解説でしたが、「三つとも一緒に設定する時はどうするのだろう?」と疑問に思う方もいると思うので、ここでまとめて置きたいと思います。
ここでの設定は”www”ありに設定し、”index.html(php)”なしです。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.tashumist.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^tashumist\.com
RewriteRule (.*) http://www.tashumist.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index\.(html|php)
RewriteRule ^(.*)index\(html|php)$ http://tashumist.com/$1 [R=301,L]
URLは該当のものに変えていただければできます。
*注意!
お使いの環境によっては上記の設定ではうまくいかないことがあるのでご注意を!
色々なサイトを見て、「どんな設定がいいのだろう」と自分で吟味することをお勧めします!