芝生やDIY等のライフハックやWeb制作情報を発信するメディア

htaccessで特定のディレクトリやページを除外して301リダイレクトする方法

Web2018年3月16日

サイト移転やリニューアルにおいてhtaccessによるリダイレクトを行うことがありますが、特定のディレクトリやページのみを除外してリダイレクトを行うことが可能です。本記事では、htaccessにて特定のディレクトリやページを除外してリダイレクト設定を行う方法をご紹介させていただきたいと思います。

こんな時におすすめ

特定のディレクトリやページだけ除外して行うリダイレクトは、以下のような場合に役立ちます。

  • WordPressなどの管理画面だけは見れるようにしたい
  • 同ドメイン内で/hoge以下をリニューアルし/hoge/index.htmlに一括で301リダイレクトするが、/hoge/sample/以下だけリダイレクトから除外したい

サンプルコード

いくつかhtaccessのサンプルコードをご紹介させていただきます。

WordPressの管理画面だけ見れるようにしたい

RewriteEngine On
RewriteBase /

#除外設定
RewriteCond %{REQUEST_URI} !(^/wp-admin/)
RewriteCond %{REQUEST_URI} !\.css$
RewriteCond %{REQUEST_URI} !\.js$
RewriteCond %{REQUEST_URI} !\.jpg$
RewriteCond %{REQUEST_URI} !\.gif$
RewriteCond %{REQUEST_URI} !\.png$

#リダイレクト
RewriteRule ^(.*)$ https://新ドメイン/ [R=301,L]

管理画面である/wp-admin/だけ見れるようにし、それ以外のユーザー用のページは新ドメインのトップにリダイレクトさせます。ポイントはcssとjs、画像もリダイレクト対象から除外しておくことですね。

/hoge/sample/以下だけリダイレクト対象から除外したい

以下のようなケースの際に使えます。

  • 同ドメイン内で/hoge以下をリニューアル
  • /hoge/index.htmlに一括で301リダイレクトする
  • ただし/hoge/sample/以下だけリダイレクト対象から除外
RewriteEngine On
RewriteBase /

#除外設定
RewriteCond %{REQUEST_URI} !(^/hoge/sample/)

#リダイレクト
RewriteRule ^(.*)$ /hoge/index.html [R=301,L]

htaccessは/hoge/直下に格納する例です。/hoge/sample/以下はリダイレクトせず、旧ページをそのまま閲覧することができます。

ちなみに、上記のサンプルはいずれも[R=301,L]により恒久的なリダイレクトである「301リダイレクト」を行っていますが、一時的なサイト移転であれば[R=302,L]としてください。

ディレクトリ単位の除外であれば複数のhtaccessを使う方法も

サイトトップには除外設定を含まないhtaccessを格納し、特定のディレクトリには以下のようなhtaccessを格納することで、リダイレクト対象から除外する方法もあります。

RewriteEngine off

RewriteEngineそのものをオフにすることで、リダイレクトを発動させない、という考え方ですね。ただ管理上htaccessはむやみに増やさないほうがよいかなとは思いますので、ケースバイケースで使い分けるのがよいでしょう。

まとめ

特定のディレクトリやページだけ除外してリダイレクトする方法を知っておくと、ユーザーフレンドリーにリダイレクトを最適化できるので、覚えておいて損はありません。

ご紹介させていただいたサンプルコードを応用すれば、もっと詳細にリダイレクトをコントロールすることも可能です。特定のディレクトリやページのみを除外してリダイレクトを行う際は、どうぞご本記事を参考にしていただければ幸いです。

「Web」の他の記事を読む

ページの先頭に戻る