【.htaccess】リダイレクト設定の書き方

技術

Webサイトの移転やURLの変更時に避けて通れないのが、.htaccessによるリダイレクト設定です。

「コピペで動いたからOK」で済ませていませんか?実は、末尾にある[L][R=301]といった記号の意味を理解していないと、「意図しないページへ飛ばされる」「SEO評価が引き継がれない」といったトラブルを招くことも。

今回は、エンジニアなら絶対に押さえておきたいリダイレクトの基本構造から、「L」と「R」の役割まで、分かりやすく解説します!

【コピペOK】.htaccessリダイレクトの基本形

.htaccessでリダイレクトを行うには、mod_rewriteというモジュールを使用します。基本の書き方は以下の通りです。

# 書き換えエンジンを起動
RewriteEngine On

# 書き換えルールの記述
# RewriteRule [現在のパス] [転送先のURL] [フラグ]
# ページ単位でリダイレクト
RewriteRule ^old-page$ https://example.com/new-page [R=301,L]
# ディレクトリ単位でリダイレクト
RewriteRule ^old-directory(.*)$ /new-directory$1 [R=301,L]

Rフラグ(Redirect):転送の種類を指定する

[R]「Redirect(リダイレクト)」の略です。これを記述することで、ブラウザに対してURLが変わったこと明示的に伝えます。

301転送と302転送の違い

ステータスコードの使い分けについてまとめます。

記述種類SEO上の意味使う場面
[R=301]恒久的な移転以前のページの評価を100%引き継ぐサイト移転
URLの完全変更
[R=302]一時的な移転以前のページの評価を一時的に保持するメンテナンス
期間限定キャンペーン

SEO効果を維持したいなら、基本は [R=301] を選んでおけば間違いありません。これを忘れると、Googleからの評価がリセットされてしまう恐れがあります!

Lフラグ(Last):処理を「ここで終了」させる

[L]「Last(最後)」を意味します。これが意外と理解されていない部分です。

Lフラグの役割

.htaccessは上から順番に1行ずつ読み込まれます。[L]がついているルールに合致した場合、「ここで書き換え処理を一旦ストップして、決定したURLへアクセスしに行く」という命令になります。

RewriteRule ^apple\.html$ fruit.html [L]
RewriteRule ^fruit\.html$ vegetable.html [L]

例)apple.htmlにアクセスした場合
1行目で条件に合致し、[L]があるため、2行目は無視してfruit.htmlを表示しようとします。
[L]がないと場合には、1行目でfruit.htmlに書き換えられた後、さらに2行目でvegetable.htmlに書き換えられてしまうといった「意図しない連鎖」が起きてしまいます。

よく使うリダイレクト設定の実践パターン

現場でそのまま使えるの記述例を紹介します。

常時HTTPS化(http → https)

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

index.htmlなしに統一

RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]

まとめ

.htaccessは、一歩間違えるとサイトが表示されなくなる「内部サーバーエラー(500エラー)」を引き起こします。変更前には必ずバックアップを取り、一つずつテストしながら進めていきましょう!