「.htaccess」の書き方
リダイレクトとは
URLが変わった時に、元のURLから新しいURLへ自動転送させることをリダイレクトと言います。リダイレクトしておくと、URLが変わったとしても、目的を持って訪れた訪問者が目的のページに辿り着けます。
次の2通りのリダイレクトの仕方について記載します。
301リダイレクト | URLが恒久的に変更された場合に用いる |
302リダイレクト | 一時的に転送する場合に用いる |
SEOの観点から301リダイレクトの設置について
転送前の検索エンジンからの評価を転送後も引き継ぎます。また、同じ内容のページへのURL、「www」のついているURLと付いていないURLを1つにまとめることで、評価を上げることを期待できます。
- 「www.example.com」と「example.com」をどちらか1つにする
Google検索の場合はサーバサイドで301リダイレクトの使用を奨めている。ヤフーについては0秒リダイレクトがSEO的に有利と言える。
リダイレクトの例
- old.com → new.com
- example.com/old/hoge.html → example.com/new/hoge.html
- example.com/hoge/old.html → example.com/hoge/new.html
ドメインの変更、ディレクトリ(カテゴリー)の変更、ファイルの変更、すべてにリダイレクトを行えます。
カテゴリー(ディレクトリ)の変更
- example.com/oldcategoryl → example.com/hoge/newcategory
リダイレクトの方法
- .htaccessファイルを編集する
- httpヘッダによるリダイレクト
- metaタグによるリダイレクト
- プラグインを利用する
「httpヘッダによるリダイレクト」「metaタグによるリダイレクト」は302リダイレクトや、移転のお知らせなどの文章を表示し、数秒後に転送させることができます。
リライト | ブラウザのアドレスバーのURLはそのまま |
リダイレクト | ブラウザのアドレスバーのURLはリダイレクト先 |
リダイレクト「.htaccess」に記述する
.htaccessファイルを設置することで、アスセスに関する機能を追加できます。主にできる事は次の点です。
- アクセスの制限(特定のページやディレクトリにIDとパスワードの入力を求める)
- 特定のファイルへのアクセスを拒否する
- 「404 Not Found」などのエラーメッセージを変更できる
- 指定のURLへ自動転送させる
.htaccessファイルを利用するためには、サーバー内で「Apache」とういソフトウエアが利用されている必要があります。
.htaccessファイルの作成で注意する点・エラーの時の確認すること
- ファイル名の最初に「ドット」を忘れないように
- 最後に改行を入れる(テキストファイルは改行で終わることを約束されています)
- テキストエディタで作成する
- 全角スペースなど入れない
- .htaccessファイルのパーミッションは「604」「644」
テキストエディタで作成することをオススメします。もしワードなど書式情報を含むソフトで作成する場合、文字コードをBOMなしで保存して下さい。メモ帳で作成する場合はデフォルトの「ANSI」で保存します。メモ帳で作成・保存する場合、拡張子「.txt」が付き保存されてしまいます。「.txt」はFTPなどでアップロード後に削除できます。
.htaccessファイルのアップロードする場所
全体に指示するのならば、一番上のディレクトリにアップロードします。指示したいディレクトリにアップロードします。

リダイレクト「.htaccess」の書き方
%{REQUEST_URI} | ドメインより後のリクエスト |
(.*) $ と $1 | ドメインより後 |
%{HTTP_HOST} | ホスト名(ドメイン) |
!^www\. | 「www.」は意外(「!」は除外) |
RewriteBase(ベースとなるディレクトリ)を省略した場合は.htaccessを設置したディレクトリがベースとなります。
ログイン画面・管理画面を除くリダイレクト「.htaccess」の書き方
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^(.*)?wp-login\.php RewriteCond %{REQUEST_URI} !^(.*)?wp-admin
ログイン画面・管理画面を除き、「https://example.com」を「https://www.example.com」にリダイレクトする
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^(.*)?wp-login\.php RewriteCond %{REQUEST_URI} !^(.*)?wp-admin RewriteCond %{HTTP_HOST} ^^example\.com$ RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
「www」ありなしリダイレクト「.htaccess」の書き方
「www」なしを「www」ありにリダイレクトする
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
「www」ありを「www」なしにリダイレクトする
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule .* http://example.com%{REQUEST_URI} [R=301,L]
「https://example.com」を「https://www.example.com」にリダイレクトする
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^^example\.com$ RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
ドメイン変更のリダイレクト「.htaccess」の書き方
「https://old.com」を「https://new.com」にリダイレクト①
RewriteEngine on RewriteCond %{HTTP_HOST} ^old.com RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]
「https://old.com」を「https://new.com」にリダイレクト②
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^old\.com$ [NC] RewriteRule .* https://new.com%{REQUEST_URI} [R=301,L]
「https://old.com」を「https://new.com」にリダイレクト
ログイン画面・管理画面を除く
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^(.*)?wp-login\.php RewriteCond %{REQUEST_URI} !^(.*)?wp-admin RewriteCond %{HTTP_HOST} ^old.com RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]
SSL化のリダイレクト「.htaccess」の書き方
「http」を「https」へリダイレクト
RewriteEngine on RewriteBase / RewriteCond %{HTTPS} off RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
下層、ドメインより後ろのリダイレクトが効かない原因
「# BEGIN WordPress」の下に記述した場合、%{REQUEST_URI} や https://www.example.com/$1 が反映されません。
上の方に記述する

.htaccessファイルのリダイレクトの記述を簡単に説明
.htaccessファイルのリダイレクトの記述「Mod_Rewrite」
Mod RewriteはアクセスしたURLを書き換えるモジュール(機能)です。URLのパス(文字列)の記述ができます。
Redirectを利用
すべてを「http://new.com/」にリダイレクトする
Redirect permanent http://new.com/
「http://old.com/」も「http://old.com/aaa」も「http://new.com/」にリダイレクト
Redirect permanent | 301 |
Redirect temp | 302 |
Rewriteを利用
- RewriteCond (条件)転送元
- RewriteRule (ルール)転送先
RewriteEngine on RewriteCond %{HTTP_HOST} ^old\.com$ RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]
※転送元URLを「old.com」転送先URLを「new.com」とする。
条件 | リクエストがold.comの場合 |
ルール | new.comへリダイレクトする |
$と$1(末尾と後方参照)
$と$1
- ^(.*)$ https://new.com/$1 [R=301,L]
リクエストが http://old.com/aaa とすると、aaaは(.*)にマッチしており、$1であり、https://new.com/aaa へリダイレクトされる
宣言文とその意味「.htaccess」の書き方
宣言文 | 意味 |
---|---|
RewriteEngine on | Mod Rewrite(書換え)の機能をON |
RewriteBase | ベースとなるパス |
RewriteCond | 条件 |
RewriteRule | ルール |
HTTP_HOST | サーバーのホスト名 |
%{REQUEST_URI} | ドメインより後ろのリクエスト |
80 | 80ポート(http)にアクセスがある |
[NC] | 大文字小文字関係なく |
R=301 | 301リダイレクトで、Rのみは302 |
L | これが最後 |
(.*) | 文字を繰り返す(あらゆる文字) |
! | 除外 |
コンピューターネットワークにおいて、HTTPは、Webサーバのポート80番を割り当てられ、接続されています。
正規表現 /リダイレクト .htaccess の書き方
文字 | 意味 | 例 | マッチ |
^(キャレット) | 先頭 | ^example | example.・・ |
$ | 末尾 | example$ | ・・example |
文字 | 意味 | 例 | マッチ |
? | 直前の表現が0個か1個 | no?te | nte、note |
* | 直前の文字を0個以上 | no*te | nte、note、noote、nooote等 |
+ | 直前の文字が1個以上 | no+te | note、noote等 |
|(パイプ) | または | tsutaya|tutaya | tsutayaまたはtutaya |
() | グループ | t(su|u)taya | tsutayaまたはtutaya |
\(バックスラッシュ) | 前に付け文字として認識させる | example\.com | example.com |
.(ピリオド) | 任意の一文字 | .* | 文字を繰り返す |
「.」ピリオドとドットの区別・エスケープ処理
正規表現の「.」(ピリオド) | . | 任意の一文字 |
「.」(ドット) | \. | 文字として認識させる |
example\.com 「\」は直後の正規表現をエスケープ
「.」任意の一文字をエスケープ
- example.com
「?」0か1
RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?example\.com$
()内はグループで?は0か1、「\.」はドット
http(s)? | httpとhttps |
(www\.)?example\.com | example.comとwww.example.com |
ディレクトリの変更(/old/以下のパスに変更がない場合)
- //example.com/old/test.html →//example.com/new/test.html に変更
- //example.com/old/test.html →//example.com/new/new2/test.html に変更
プラグインを利用すると簡単
ディレクトリ(カテゴリーのみ)のリダイレクトはプラグインが簡単です。
カテゴリーlaunchだけ、他のサイトい移転した場合
/category/launch/ を https://example.com/category/launch/ へリダイレクト
「/category/launch/(.*)$
」→「https://example.com/category/launch/$1
」
プラグインでのディレクトリのリダイレクトの手順は下のリンクをご参考ください。
リダイレクト「.htaccess」の書き方
Redirectを利用
Redirect permanent /old/ //example.com/new/
Redirect permanent /old/ //example.com/new/new2/
Rewriteを利用
RewriteEngine on RewriteBase / RewriteRule ^old/(.*)$ //example.com/new/$1 [R=301,L]
RewriteEngine on RewriteBase / RewriteRule ^old/(.*)$ //example.com/new/new2/$1 [R=301,L]
ページのリダイレクト /リダイレクト「.htaccess」の書き方
- //example.com/ランチ/ハンバーグ.html →//example.com/料理/洋食.html に変更。
※日本語で記載しました。
Redirectを利用
Redirect permanent /ランチ/ハンバーグ.html //www.example.jp/料理/洋食.html
Rewriteを利用
RewriteEngine on RewriteBase / RewriteRule ^/ランチ/ハンバーグ.html //www.example.jp/料理/洋食.html [R=301,L]
特定のディレクトリをリダイレクトから除外 /「.htaccess」の書き方
- RewriteCond %{REQUEST_URI} !(^/除外ディレクトリ名/)
※日本語で記載しました。
ランチを除外する
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !(^/ランチ/) RewriteRule ^(.*) //www.example.com/$1 [R=301,L]
除外
{REQUEST_URI} ! | 除外 |
プラグインを利用する場合