リダイレクト用.htaccessの書き方ルール!コピペOKの記述例13選
2022.12.08
.htaccessはリダイレクトを設定する代表的な方法ですが、ほんの少しでも書き方を間違ってしまうと途端にエラーが発生してしまいます。
しかも、設置場所を間違うとサイト全体が表示されなくなることもあるのです。
そこで今回は、.htaccessを使って正常にリダイレクトが機能するよう、対応サーバーの種類・ファイルの作り方・書き方ルールなどを手順に沿って解説します。
注意点も併せて参考にしてください。
.htaccessで設定したリダイレクトはSEOに有利!
.htaccessによる各種設定はセキュリティ対策だけでなく、SEOに役立つ用途も数多く含まれています。
.htaccessでできること
- リダイレクト設定
- URLの正規化
- BASIC認証
- 指定したIPアドレスからのアクセス制限(不正アクセスの防止)
- カスタム404ページの表示
中でも、ユーザーの利便性に直結するリダイレクト設定はSEO対策としての必須要素です。
ちなみに、理想的な転送処理として評されている301リダイレクトの設定方法はいくつかありますが、Googleは.htaccessを使用する方法を推奨しています。
リダイレクト用.htaccessファイルの作成手順
.htaccessでリダイレクトを設定する手順は、下記の6ステップで進めます。
- 契約中のサーバーで.htaccessが使えるか確認する
- .htaccessファイルを用意する
- 転送処理のコードを記述する
- 正しいファイル名、拡張子で保存する
- .htaccessファイルの設置場所を確認する
- サーバーにアップロードする
.htaccessが使えるサーバー7選
全てのサーバーで.htaccessが使える訳ではありません。
.htaccessに対応しているサーバーは、下記2つの条件を両方とも満たしている必要があるのです。
.htaccess対応サーバーの条件
- Apacheがインストールされている
- mod_Rewrite (Apache用のモジュール)をサポートしている
ご使用のサーバーが下記に含まれている場合は、.htaccessを使ってリダイレクト設定を行うことができます。
.htaccessが使えるレンタルサーバー
- ロリポップ
- Xserver
- WADAX
- さくらのレンタルサーバ
- お名前.comレンタルサーバー
- ステップサーバー
- ラクサバ
大手サーバーのほとんどが対応しているのですから、.htaccessの利用者が多いのも頷けます。
一方、Nginxのサーバーはホスティングサービスで対応できる場合を除き、基本的にhtaccessファイルを使用することはできませんので注意が必要です。
.htaccessファイルを用意する
対応サーバーだからと言って、必ずしもサーバー内に.htaccessファイルが用意されているとは限りません。
あらかじめ、.htaccessファイルがサーバー内に存在するか確認しておきましょう。
.htaccessファイルの有無による対応の違い
- 有り:指定ファイルをダウンロードし、コード(命令文)を記述してからアップロードする
- 無し:メモ帳などのテキストファイルにコードを記述してアップロードする
.htaccessの書き方ルール5つ
.htaccessには書き方ルールがあり、少しでも記述ミスがあるとエラーや誤作動が発生しますので、必ず厳守して下さい。
コードの書き方ルール
- htaccessファイル内で日本語は使わない(エラー・文字化け防止)
- # から始まる行がコメントアウトされる
- 文字コードはUTF-8(BOM無し)
- 改行する場合はLFを使用する
- 最終行には空行を入れる
リダイレクトの記述例!ケース別.htaccessの書き方
では早速、リダイレクトを設定する「.htaccess」の書き方について、実際にコードを見ながら解説していきます。
一般的なリダイレクト設定
- ドメイン単位の転送
- サブドメインの転送
- ディレクトリ単位の転送
- ページ単位の転送
- ドメイン・ディレクトリ・ページの全てを変更する転送
- 特定のディレクトリをリダイレクトから除外する
- 404エラーページの転送(404リダイレクト)
- デバイスごとに振り分ける転送
なお、ここでは最も一般的な301リダイレクト(恒久的)を設定するための書き方をご紹介しています。
一時的に転送させたい場合は、構文の「301」を「302」に書き変えてご利用ください。
ドメイン単位の転送
下記のケースに当てはまる場合は、ドメイン単位(Webサイト全体)のリダイレクトを設定します。
記述例:「旧ドメイン」→「新ドメイン」へのリダイレクト
RewriteEngine On
RewriteCond %{HTTP_HOST}^旧ドメイン.com
RewriteRule ^(.*)$ https: //新ドメイン.com/$1 [R=301,L]
下記のようにhttpsまたはhttpに統一されている場合は、よりシンプルに記述することもできます。
記述例:「旧ドメイン」→「新ドメイン」へのリダイレクト(httpsに統一済み)
RewriteEngine On
Redirect permanent / https://新ドメイン.com/
サブドメインの転送
サブドメインとは「https://sub.●●.com/」のように区分されているドメイン、ルートドメインとは「https://■■.com」のように区分されていないドメインのことです。
記述例:「サブドメイン」→「ルートドメイン」へのリダイレクト
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub\.●●\.com$
RewriteRule (.*) https://■■.com/$1 [R=301,L]
下記のように、反対方向へ転送することも可能です。
記述例:「ルートドメイン」→「サブドメイン」へのリダイレクト
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sub\.●●\.com
RewriteRule ^(.*) https://■■.com/sub/$1 [R=301,L]
ディレクトリ単位の転送
ディレクトリ単位のリダイレクト設定が必要になるのは、下記のような理由でディレクトリ構造が変化した時です。
- 社内の組織編成が変更になった
- 部分リニューアルをした
- CMSを変更した
- サーバーの分割(負荷の軽減やDISK容量不足の対処)
- 特定のディレクトリだけ、単独サーバーに移行した
記述例:「/●●/」ディレクトリ→「/■■/」ディレクトリへのリダイレクト
RewriteEngine on
RewriteRule ^●●(.*)$ /■■$1 [R=301,L]
ページ単位の転送
下記のようなケースでは、ページ単位で転送します。
- リライトに伴い、ページのURLを変更した
- キーワードの追加に伴い、パーマリンクを変更した
- 複数のページを統合した
変更前が「sampl.com/●●.html」、変更後が「sampl.com/■■.html」だった場合、URLのファイル名だけを使って記述します。
記述例:「変更前の●●ページ」→「変更後の■■ページ」へのリダイレクト
RewriteEngine on
RewriteRule ^●●.html$ /■■.html [R=301,L]
ドメイン・ディレクトリ・ページ全てを変更する転送
URL全体を変更した時は、下記のように記述します。
記述例:旧「https://www.●.com/●/●.html」→新「https://www.■.com/■/■.html」へのリダイレクト
RewriteEngine on
RewriteRule https://www.●.com/●/●.html
https://www.■.com/■/■.html [R=301,L]
特定のディレクトリをリダイレクトから除外する
サイト全体に「■■」へのリダイレクトを設定したいが、特定のディレクトリだけは「■■」へ転送させたくない、という場合の書き方です。
記述例:「●●」ディレクトリだけ除外するリダイレクト
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(^/●●/)
RewriteRule ^$ http:www.■■.com [R=301,L]
404エラーページの転送(404リダイレクト)
下記のように、ユーザーがサイト上に存在しないURLへアクセスすると、「Not Found」またはレンタルサーバーが用意した「404エラーページ」が表示されます。
あらかじめ用意しておいた404エラー専用のカスタマイズページにリダイレクトを設定しておくことで、ユーザーの取り逃がしを防ぐことができるのです。
記述例:「404htmlファイル」へのリダイレクト
ErrorDocument 404 /404.html
上記の「404html」とは、カスタマイズした404エラーページのファイル名で、任意変更も可能です。
リダイレクトを設定する前に「TOPページへ」や「サイトマップ」などを設けたオリジナルの404ページのファイルを作成し、サーバーにアップロードしておきましょう。
デバイスごとに振り分ける転送
こちらは、「PCサイト」と「スマホサイト」を統一せず、別々に運営・管理している場合に使うリダイレクトです。
記述例:スマホからのアクセス→スマホ用のディレクトリ「/sp/」へリダイレクト
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.*Mobile|Windows.\ Phone)
RewriteRule ^(.*)$ sp/$1 [R]
RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android.*Mobile|Windows.\ Phone)
RewriteRule ^sp/(.*)$ $1 [R]
SEOに効果的なリダイレクトの記述例
ここからは、SEO対策として欠かせない「URLを統一」するリダイレクトの買い方をご紹介します。
SEOに効果的なリダイレクト
- www「あり」に統一する転送
- WWW「なし」に統一する転送
- index.html「あり」に統一する転送
- index.html「なし」に統一する転送
- SSL導入に伴う転送(http→https)
www「あり」に統一する転送
「www」の有無を統一するURLの正規化は、SEO対策の基本です。
www「ありなし」は、どちらに統一させても問題ありません。
ただし、www「なし」のアドレスにアクセスした際にwww「あり」のサイトが表示されるとGoogleからの評価が分散されてしまうので、どちらかに統一した方がSEOにとって有利です。
下記の構文では、wwwなしの「https://●●.com」にアクセスした際、wwwありの「https://www.●●.com」に転送されます。
記述例:www「あり」に統一するリダイレクト
RewriteEngine on
RewriteCond %{HTTP_HOST} ^●●\.com$
RewriteRule ^(.*)$ https://www.●●.com/$1 [R=301,L]
www「なし」に統一する転送
こちらは反対に、wwwありの「https://www.●●.com」にアクセスした際、wwwなしの「https://●●.com」へ転送されます。
記述例:www「なし」に統一するリダイレクト
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.●●\.com$
RewriteRule ^(.*)$ https://●●.com/$1 [R=301,L]
index.html「あり」に統一する転送
下記のように、URLの最後に「index.html」が付いているかいないかで、異なるサイトと認識されてしまいます。
- http://●.com/■■/index.html
- http://●.com/■■/
URLの不統一は、SEO評価を低下させる原因です。
下記の記述例を参考に、「index.html」についてもリダイレクトを設定してURLを統一しておきましょう。
記述例:index.html「あり」で統一するリダイレクト
RewriteEngine on
RewriteRule ^$ /index.html [R=301,L]
index.html「なし」に統一する転送
記述例:index.html「なし」で統一するリダイレクト
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://●●.com/$1 [R=301,L]
SSL導入に伴う転送(http→https)
SSL(データ通信の暗号化)は企業だけでなく、一般家庭でも常識になっています。
今後もセキュリティへの関心が薄れるとは考えにくいので、恒久的な301リダイレクトを設定しておきましょう。
記述例:http→httpsへのリダイレクト
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
.htaccessファイルの設置場所と影響範囲
htaccessファイルは正しい場所に設置しないと機能しないばかりか、サイト全体で不具合が発生し兼ねません。
アップロードする前に、どこに設置すべきなのか必ず確認しておきましょう。
.htaccessファイルの影響範囲は、設定(アップロード)した場所より配下にある全ディレクトリです。
したがって、「何」を「どこまで」適用させるかで.htaccessファイルを設置すべき場所が異なります。
設置場所の一例
- 「Webサイト全体」に適用させる場合:TOPと同じ階層に設置する
- 「http://www.example.jp/A/」以下だけに適用させる場合:「A」というディレクトリに設置する
2番のケースでは、「A」より下層にある「A-1」や「A-2」といったサブディレクトリにも反映されます。
その一方で、「A」と同じ階層にある「B」や「C」といったディレクトリには反映されません。
設置場所のポイント
- 内容が異なる.htaccessファイルを、同じ階層の別ディレクトリにそれぞれ設置することも可能
- 複数の.htaccessファイルを別階層に設置した場合、より下の階層に設置した方が優先される
.htaccessでリダイレクトを設定する際の注意点
最後に、.htaccessでリダイレクトを設定する際の注意点について解説します。
注意点
- 保存時のファイル名と拡張子
- アップロード方法はサーバーによって異なる
- .htaccessファイルが見つからない時の対処法
- WordPressに必須の記述は削除・上書きしない
保存時のファイル名と拡張子
Windowsのメモ帳で.htaccessファイルを作成した場合は、「.txt」という拡張子が付いていない「.htaccess」というファイル名で保存します。
ただし、Windows環境下で「.txt」が消えないなど「.htaccess」というファイルが作成できない場合は、下記の対処法を試してみましょう。
対処法
- ファイル名の最後にドット(.)を入れ、自動変換されるか試す
- 一時的に「.htaccess.txt」や「”.htaccess”」で保存し、アップロード後サーバー側で「.htaccess」に変更する
一方、mac(iOS)やUNIX系のOSを使用されている方は、ドット(.)から始まるファイルが不可視ファイルとして扱われるため、下記のように対処します。
mac(iOS)環境でファイルを保存する方法
- 「htaccess.txt」や「a.htaccess」などのファイル名で保存する
- サーバーにアップロード後、サーバー上でファイル名を「.htaccess」にリネームする
アップロード方法はサーバーによって異なる
完成した.htaccessファイルをサーバーにアップロードして、設定内容を実行させましょう。
通常はFTPソフトなどを使用しますが、アップロード方法は各サーバーによって手順が異なりますので、公式HPで確認して下さい。
「604」などのバーミッションも、各サーバーのルールに従いましょう。
.htaccessファイルが見つからない時の対処法
書き方ルールもアップロード方法も間違っていないのに、なぜかファイルが見つからない…という不思議な現象に悩まされている方もいるようです。
FTPソフトやPC環境によっては、先頭がドット「.」から始まるファイルが初期設定で非表示になっている可能性があります。
いわゆる「隠しファイル」として扱われている場合は、下記の方法で可視化してみましょう。
隠しファイルを表示させる方法
- FFFTP(FTPソフト):「表示」→「.で始まるファイルを表示」にチェックを入れる
- PC環境:「ウィンドウズマーク」→「エクスプローラー」→「表示」→「オプション」→「登録されている拡張子は表示しない」のチェックを外す
WordPressに必須の記述は削除・上書きしない
WordPress内には元々.htaccessファイルが存在し、そこには最初から下記の構文が記載されています。
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L] RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
上記の記述を削除または上書きすると、ページが非表示になったり正しく表示されなくなったりする可能性があります。
WordPress内の.htaccessファイルを利用する際は、すでに記述されている内容を編集せずにそのまま残しましょう。
WordPress内に.htaccessファイルがあるとは限らない
もちろんWordPressでも設定は可能ですし、通常であればインストールしたルートディレクトリ内に.htaccessファイルが用意されています。
基本的な書き方も同じなので、前述した記述例と書き方ルールを参考にしてください。
ただし、必ずしもWordPress内に.htaccessファイルがあるとは限りません。
インストール時に作成されているはずの.htaccessファイルない場合は、前述した「.htaccessファイルが見つからない時の対処法」を試してみましょう。
それでも見つからないのなら、インストール時の不具合かもしれません。
例えば、FFFTPというFTPソフトであれば下記の手順で.htaccessファイルが新たに自動生成されます。
.htaccessファイルが作成されていなかった時の対処法
- FFFTP からサーバーにアクセス
- 対象のフォルダで右クリック
- 「属性変更」を選択
- パーミッションを「755」に変更し、「OK」をクリック
- WordPressの管理画面へログイン
- 「設定」→「パーマリンク設定」
- 設定を変更せずに、そのまま「変更を保存」をクリック
まとめ
.htaccessを使ったリダイレクト設定は、サーバー領域に影響を与える作業です。
アクセス権を持っているサーバー管理者ならともかく、できれば担当したくないと避けている方が多いのも当然かもしれません。
ポイントは、「正しい書き方ルール」と「設置場所の見極め」です。
Webサイトの制作・運営に携わっている方なら、マスターしておいて損はありません。
関連