htaccessで特定のページを301リダイレクトする方法

Image

Web制作の中でサイトの引っ越しやURLの変更等によりhtaccessを編集する機会は多くあると思います。しかも最近はサイト全体の常時SSL化が必須になってきてますので、フロントよりのエンジニアの方もhtaccessを触ることが多いのではないでしょうか。htaccessはサーバのディレクトリ単位で制御するファイルとなりますが、ページ単位でのリダイレクトも可能となっています。

今回はドメインやページのURLの変更した際に役立つページ単位のリダイレクト方法をご紹介したいと思います!

ディレクトリ構成

本記事では以下のディレクトリ構成を使用して解説しています。旧ドメインのサイト内にあるファイルにアクセスがあった際に新ドメインのサイトのファイルにリダイレクトすることを想定していますが、同一ディレクトリ内でのリダイレクトも可能です。

#ディレクトリ構成
www               #ドメイン
  ┗ old-example ← (old-example.com)
    ┃
    ┣ .htaccess
    ┃
    ┣ html
    ┃  ┗ html-01.html
    ┣ jquery
    ┃  ┗ jquery-01.html
    ┣ php
    ┃  ┗ php-01.html
    ┗wordpress
       ┗ wordpress-01.html

www               #ドメイン
  ┗ new-example ← (new-example.com)
    ┃
    ┣ html
    ┃  ┗ html-01.html
    ┣ jquery
    ┃  ┗ jquery-01.html
    ┣ php
    ┃  ┗ php-01.html
    ┗wordpress
       ┗ wordpress-01.html

用語

RewriteEngine

Onと記述することでリダイレクトが有効になります。リダイレクトを設定するにはApacheモジュールのmod_rewriteが有効になっている必要があります。(ほとんどのレンタルサーバでは有効になっています。VPSをご利用の場合はmod_rewriteのモジュールをインストールしましょう。)

RewriteBase

リダイレクトのベースとなるディレクトリを設定します。本記事のディレクトリ構成ではドメインを当てているディレクトリの直下にhtaccessを設置しているため「/」となります。

RewriteBase

URLの書き換えルールを記述します。

ページ単位でリダイレクトを設定する

ページ単位のリダイレクト設定例です。旧サイトにアクセスが有った場合に新サイトにリダイレクトされるようになります。

# ここにアクセスがあったら
https://old-example.com/html/html-01.html
↓
# ここにリダイレクトしたい
https://new-example.com/html/html-01.html

htaccess

# old-exampleの.htaccess
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^html/html-01.html https://new-example.com/html/html-01.html [R=301,L]
</IfModule>

複数ページでリダイレクトを設定する

リダイレクトを設定したいページが複数ある場合はRewriteRuleを下に追加していきます。

# 1. ここにアクセスがあったら
https://old-example.com/html/html-01.html
↓
# ここにリダイレクトしたい
https://new-example.com/html/html-01.html

# 2. ここにアクセスがあったら
https://old-example.com/jquery/jquery-01.html
↓
# ここにリダイレクトしたい
https://new-example.com/jquery/jquery-01.html

htaccess

# old-exampleの.htaccessに追記
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^html/html-01.html https://new-example.com/html/html-01.html [R=301,L]
  RewriteRule ^jquery/jquery-01.html https://new-example.com/jquery/jquery-01.html [R=301,L]
</IfModule>

WordPressのhtaccessにリダイレクト設定を追加する

WordPressのhtaccessに独自のルールを追加する場合は、下記に追加していきます。

htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# ここに追加する
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^html/ https://new-example.com/html/ [R=301,L]
</IfModule>

以上、htaccessを使ってページ単位で301リダイレクトを設定する方法のご紹介でした!