今回は、.htaccessファイルを使ったリダイレクトに関する書き方についてまとめていこうと思います。

  • 別ドメインへ301リダイレクトさせる方法
  • SSL化時のhttpをhttpsへリダイレクトさせる方法
  • wwwのありなしの統一方法

などについて、それぞれ整理していきます。

WordPressサイトであればすでに# BEGIN WordPress ~ という記述があるかと思いますので、基本的にはその直前に追記することでリダイレクトできます。

※ 実際に.htaccessを編集するときはファイルのバックアップを必ずとってから行うようにしましょう。記述ミスがあるとサイトは500エラーとなり、真っ白になります。また、文字コードはUTF-8で編集してください。

目次
自分の価値を生み出すWordPressテーマ、SWELL

【限定セール中!】ブログ向けWordPressテーマを開発しました!

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にリダイレクトする、という処理内容です。

ドメインを記述する必要はないので、コピペで使い回し可能です。

 

ただし、使用しているサーバーによっては上記でうまくリダイレクトできないかもしれないので注意してください。

サーバーごとの書き方の違いについては、以下の記事でまとめています。ぜひご覧ください。

[SSL導入] レンタルサーバーごとに異なる!httpからhttpsへリダイレクトさせる.htaccessの書き方とmod_rewriteの基本知識[SSL導入] レンタルサーバーごとに異なる!httpからhttpsへリダイレクトさせる.htaccessの書き方とmod_rewriteの基本知識

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>

参考:.htaccessでURLをwww有りに統一するクールな書き方

wwwなしに統一する

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
</IfModule>

参考:.htaccessでURLをwww無しに統一するクールな書き方

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)をそのまま書いているものや、書いていないもの、いくつかの方法で同じリダイレクト処理が可能です。

なので、「あっちとこっちのサイトで書いていることが違う...!」と迷ってしまうかもしれませんが、どっちでも大丈夫です。

実際に記述してみて、思った通りに動けば、それでよいのです。

- Thank you for reading. -

コメント

コメントする