サイトアイコン WEBデザインMATOME

WordPressで「管理画面だけ残して」それ以外をリダイレクトする方法(閉鎖・告知ページ誘導に便利)

サイト運営をしていると、こんな状況が発生することがあります。

このようなケースで便利なのが、

「WordPressの管理画面以外は特定ページへリダイレクトする」設定です。

この記事では、実案件のURLなどは出さずに、サンプルURL(example.com)を使って、仕組みと実装方法をわかりやすく解説します。

「管理画面以外リダイレクト」の仕組みとは?

✅ 目的

Webサイトにアクセスがあった際に、以下のような挙動にします。

例)

アクセス先挙動
https://example.com/→ お知らせページへ転送
https://example.com/service/→ お知らせページへ転送
https://example.com/wp-admin/転送しない(管理画面へアクセス可能)
https://example.com/wp-login.php転送しない(ログイン可能)

こういう時に役立つ(導入シーン)

この機能は以下のような状況で非常に効果を発揮します。

サイト閉鎖・移転のお知らせ

サイトをそのまま放置すると、ユーザーは混乱します。
全ページを「閉鎖のお知らせ」へ統一することで迷子を防げます。

一時停止(工事中)

制作途中、デザイン刷新中などで「見られたくない」場合に便利です。

セキュリティ面の簡易対応

サイト公開を止めたいけど、管理者はWordPressに入りたい…
という要望を叶えられます。

実装方法は2種類(おすすめあり)

このリダイレクトは主に2つの方法で実現できます。

方法A:functions.phpで実装(おすすめ)

WordPressのテンプレート側(テーマ)で制御する方法です。
カスタマイズとして最も扱いやすく、動作の調整もしやすいです。

特徴

サンプルコード(URLは sample)

/**
 * 管理画面以外を特定URLへリダイレクトする
 */
add_action('template_redirect', function () {

  // 管理画面やログイン画面は除外
  if (is_admin()) return;
  if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false) return;
  if (strpos($_SERVER['REQUEST_URI'], 'wp-admin') !== false) return;

  // WordPress内部処理も除外(必要な例外)
  if (defined('DOING_AJAX') && DOING_AJAX) return;
  if (defined('REST_REQUEST') && REST_REQUEST) return;
  if (defined('DOING_CRON') && DOING_CRON) return;

  // 転送先(お知らせページなど)
  $redirect_url = 'https://example.com/news/notice/';

  // 無限ループ防止(すでに転送先なら何もしない)
  $current_url = home_url(add_query_arg([], $GLOBALS['wp']->request));
  if (untrailingslashit($current_url) === untrailingslashit($redirect_url)) return;

  // リダイレクト実行
  wp_redirect($redirect_url, 301);
  exit;
});

方法B:.htaccessで実装(サーバー側)

Apacheサーバーの .htaccess で制御する方法です。
WordPressより先に処理されるので強力かつ高速です。

特徴

サンプル設定(URLは sample)

RewriteEngine On

# 管理画面は除外
RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{REQUEST_URI} !^/wp-login\.php [NC]
RewriteCond %{REQUEST_URI} !^/wp-json [NC]
RewriteCond %{REQUEST_URI} !^/wp-cron\.php [NC]

# 転送先自身は除外(無限ループ防止)
RewriteCond %{REQUEST_URI} !^/news/notice/?$ [NC]

RewriteRule ^(.*)$ https://example.com/news/notice/ [R=301,L]

「除外すべきページ」について

管理画面だけ除外するのではなく、以下も除外しておかないと不具合の原因になります。

これらがリダイレクトされると、

などが起きる可能性があります。

そのため、上記コードでは「内部処理系」を除外しています。

リダイレクト設定の注意点(かなり重要)

無限ループ防止が必要

「転送先ページまで転送される」状態だと無限ループになります。

→ なので 転送先ページ自身は除外する条件が必須です。

301 / 302 の使い分け

Googleの評価やインデックスにも影響するため、意図に合わせて選びましょう。

まとめ:閉鎖・メンテナンス時に最強の設定

WordPressサイトを「お知らせページだけ表示」にしつつ、
管理画面は触れる状態にしたい場合、

管理画面以外をリダイレクトする設定が非常に便利です。

そして実装は、

という選び方がわかりやすいです。

モバイルバージョンを終了