こんにちは、Ryohei(@ityryohei)です!

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リダイレクトを設定する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。