今回は、.htaccessファイルを使ったリダイレクトに関する書き方についてまとめていこうと思います。
- 別ドメインへ301リダイレクトさせる方法
- SSL化時のhttpをhttpsへリダイレクトさせる方法
- wwwのありなしの統一方法
- などについて、それぞれ整理していきます。
WordPressサイトであればすでに# BEGIN WordPress ~
という記述があるかと思いますので、基本的にはその直前に追記することでリダイレクトできます。
※ 実際に.htaccessを編集するときはファイルのバックアップを必ずとってから行うようにしましょう。記述ミスがあるとサイトは500エラーとなり、真っ白になります。また、文字コードはUTF-8で編集してください。
mod_rewriteモジュールの基本的なこと
.htaccess
でのリダイレクト処理は、Apacheで使用できるモジュールの一つ、mod_rewriteモジュールを使用します。
なので、リダイレクトに関する処理については、mod_rewriteが有効な状態の場合のみ実行されるようにリスク回避しておく必要があります。
以下のように、IfModule ~ でモジュールが有効かどうかで処理を分岐できます
<IfModule mod_rewrite.c>
#mod_rewriteが有効な場合だけ実行する処理をここに記述します
</IfModule>
この中で使う記述ルールについて簡単に説明しておきます。
RewriteEngine on
mod_rewriteモジュールを起動する宣言式
RewriteCond {条件}
どういった場合にリダイレクト処理を実行するかどうかについて、条件を指定できるます。
RewriteRule {パターン} {置換内容} [R, L]
どのように書き換えるのかを指定でき、{パターン}に一致した部分を{置換内容}に書き換えます。
[R={リダイレクト方式}]というように、どのような方式でリダイレクトさせるかも指定できます。
[ ]の中に L をつけることで、URL書き換え処理を終了します。
別ドメインへ引っ越しする場合の301リダイレクト方法
では、実際の記述をみていきましょう。まずは別ドメインへのリダイレクトについてです。
例1:単純にドメインが変わるだけ(ディレクトリ構造そのまま)の引っ越し
例えば、//example.com
のドメインを、https://new-example.com
へとリダイレクトしたいような場合。
example.com
直下の.htaccess
ファイルに以下を記述
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*) https://new-example.com/$1 [R=301,L]
</IfModule>
SSL化時のhttpからhttpsへのリダイレクト
今ではほぼ必須となったSSL化、リダイレクト処理を忘れないように注意したいですね。
http://example.com
から https://example.com
へリダイレクトさせるコード
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
httpsかどうかを判断し、httpsじゃなければhttpsにリダイレクトする、という処理内容です。
ドメインを記述する必要はないので、コピペで使い回し可能です。
ただし、使用しているサーバーによっては上記でうまくリダイレクトできないかもしれないので注意してください。
サーバーごとの書き方の違いについては、以下の記事でまとめています。ぜひご覧ください。
wwwの有無を統一するためのhtaccessの書き方
example.comにするか、www.example.comにするかの統一ですね。
ドメインを記述しなくてもいいクールな書き方を紹介しておきます。
wwwありに統一する
https://example.comをhttps://www.example.comへリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
wwwなしに統一する
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
</IfModule>
HTMLサイトをWordPress化した時にURLから.htmlを消す方法
例えば、example.com/works.htmlなどで運用していたページを、それぞれ example.com/works/ として新たに運用していきたい場合。
URLから.htmlを削除してリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)\.html$ /$1[R=301,L]
</IfModule>
.htaccessのリダイレクトの書き方は一つじゃない
.htaccessでは正規表現を使ったりできるので、ドメイン名(exampke.com)をそのまま書いているものや、書いていないもの、いくつかの方法で同じリダイレクト処理が可能です。
なので、「あっちとこっちのサイトで書いていることが違う...!」と迷ってしまうかもしれませんが、どっちでも大丈夫です。
実際に記述してみて、思った通りに動けば、それでよいのです。