エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


WordPressの管理画面と公開画面を別のドメインに分離して運用する方法

      2017/03/08

WordPressの管理画面と公開画面を別ドメインにする

 

WordPressの管理画面と公開画面を別ドメインにするとは?

 
WordPressは、一般的には下記の様に管理側と公開側のドメインは同じで、公開側の URLに対して「wp-login.php」を付けるとそこに管理画面のログイン画面があり、「wp-admin」に管理画面に関するファイルが置いてある、という構成になっています。
 
公開側  http://www.example.com
管理側  http://www.example.com/wp-login.php
 
 
これに対して、下記の様に管理側のプログラムと公開側のプログラムを分離し、別々のドメイン、サブドメインなどを設定して運用する方法を解説します。
 
公開側  http://www.example.com
管理側  http://admin.example.com/wp-login.php
 
 

管理画面と公開画面を分離するメリット

 
標準的な設置方法では WordPressの管理画面の URLは決まっています。
また、管理機能のファイルが設置してある「wp-admin」のフォルダ名称は変更できませんので、WordPressの管理機能に不正アクセスをしようとする方にとっては非常に分かりやすい構成となっています。
 
ですが、管理側の URLを公開側の URLと違うドメイン、サブドメインにしてしまうことで、公開側の URLからは管理側のファイルの場所を推測することができなくなりますので、セキュリティレベルを大きく向上させることができるようになります。
 
 
この方法は、プラグインなどが必要なわけではなく、WordPressの標準機能として搭載されている機能を利用し設定を変更するだけの有用性が高い方法です。
あまりネットでは見かけない情報ですが、オフィシャルサイトにも解説がある方法の応用で、新規構築の時だけでなく、現在運用中のサイトでも実施できる方法です。
 
また、今回はサブドメインで設置することを想定していますが、別ドメインであっても IPで設定する方法であっても対応できます。
 
 

WordPressの管理画面と公開画面を別ドメインにする仕組み

 
技術的な理解は下記のオフィシャルサイトをご覧ください。
この機能を利用して実現しています。
 
 https://wpdocs.osdn.jp/WordPress を専用ディレクトリに配置する

 
このページは、管理画面の「設定」-「一般」で遷移する「一般設定」画面の「サイトアドレス (URL)」の説明の場所に記載があるリンクで、WordPressの管理機能を含め、WordPress関連のファイルをドキュメントルート以外のフォルダにまとめ、WordPress以外のファイルと混ざらないようにするための解説です。
 
20160516_wp_01
 
この手法は、WordPress以外のファイルも設置するサイトには有効な方法です。
今回は、この仕組みを利用して、管理側と公開側を完全に分離する方法を実現します。
 
 


 

WordPressの管理画面と公開画面を別ドメインにする方法の解説

 
管理側と公開側の URLを別のものにするための WordPressの設置方法ですが、新規に WordPressを設置する際にその設定をする方法と、すでに設置してあるサイトの管理画面を分離する際の設定方法の 2パターンがありますので、それぞれ解説します。
 

 
 
 

WordPressを新規で設置する場合

 
新規に WordPressを設置する場合は比較的簡単です。
 

1.WordPressのインストール

管理画面の URLとなる場所に WordPressをインストールします。
インストール方法は通常の方法と同じようにインストールを行います。
 
例として「http://admin.example.com」となる場所にインストールを行うとします。
 
 

2.管理画面から「パーマリンク」を変更

インストールが終わると、管理画面、公開画面ともに正しく動作するかを確認します。
 
動作確認ができたら、パーマリンク設定をする場合は、まず最初にパーマリンク設定を行います。
管理画面の「設定」-「パーマリンク設定」から「パーマリンク設定」の画面に遷移し、パーマリンクの設定を行います。
パーマリンクを「基本」のままでいい場合は対応をする必要はありません。
 
 
 

3.ファイルのコピー

管理画面をインストールしたルートフォルダにある「index.php」と「.htaccess」を、公開側のルートフォルダにコピーします。
「2.管理画面から「パーマリンク」を変更」を行っていない場合は、「.htaccess」がない場合も多いでしょう。その場合は「index.php」のみで OKです。
 
例では、「http://www.example.com」のドキュメントルートフォルダに「index.php」と「.htaccess」をコピーします。
 
 

4.ファイルの移動

公開側からも利用する「wp-content」フォルダを、管理側の領域から公開側の領域へ移動させます。
場所は、公開側の領域にあればどこでも問題ありません。
また、「wp-content」のフォルダ名を変更することも可能です。
 
例では、
「http://admin.example.com」にある「wp-content」を「http://www.example.com」のルート直下に「wp-content-2」というフォルダ名に変更して設置します。
 
  新パス  /home/example.com/public_html/www/wp-content-2
  新URL   http://www.example.com/wp-content-2
 
 

5.公開側の index.php の設定変更

 
「3.ファイルのコピー」でコピーした公開側「http://www.example.com」フォルダにある index.phpファイルを開き各種設定情報を記載します。
 

5-1.wp-blog-header.phpまでのパスの変更

 

 
変更後のファイルのパスは、管理画面の「http://admin.example.com」にある「wp-blog-header.php」ファイルまでのパスになります。
実際の値は各自のサーバに合わせて変更をしてください。
 
「dirname( __FILE__ )」のように動的な指定をしたいところですが、なかなか難しい場合もありますので、ここでは「wp-blog-header.php」までのパスを直接指定する方法にしています。
 
 

5-2.定数「WP_HOME」「WP_SITEURL」の追加

 
管理画面の URLと公開側の URLが違うものになっていますので、公開側では公開側の URLになるよう定数を指定します。
 

 
上記の定数は、「define('WP_USE_THEMES', true);」のすぐ下に追記をします。
前項で説明した「wp-blog-header.php」のパス指定より下に書いても反映されませんので注意が必要です。
 
 

6.公開側の .htaccess の設定変更

「3.ファイルのコピー」で .htaccessもコピーした場合は、.htaccessの記述内容も確認しておきましょう。
 
下記の内容は WordPressのパーマリンク設定に必要な記述です。
管理画面側の Basic認証の設定などの情報が記載されている場合は、必要に応じて削除しておきましょう。
 

 
上記の URLリライトの設定が必要なのは公開側の方ですので、例では「http://www.example.com」のドキュメントルートにある「.htaccess」の内容を確認します。
(管理側と公開側のフォルダ構成が違う場合はパスの修正も必要です。)
 
 

7.メディアのファイルの保存先を変更

 
メディア(ファイルアップローダー)からファイルをアップロードする際にアップロードされるフォルダを公開側の領域のフォルダを指定をします。
 
詳細は「WordPressのメディア設定でアップロードするファイルの保存場所を変更する方法」で解説していますので読んでください。
 

7-1.画像をアップロードするフォルダの作成

画像をアップロードするフォルダを作成します。
パーミッションは「/wp-content/themes」のフォルダと同じものを設定します。
 

7-2.「upload_path」「upload_url_path」を指定

下記の URLにアクセスします。
 http://admin.example.com/wp-admin/options.php
 
7-1.で作成したフォルダまでのファイルのパスを「upload_path」に、表示する際の URLを「upload_url_path」に記述します。
 
例:「upload_path」  /home/example.com/public_html/www/images
「upload_url_path」  http://www.example.com/images
 
 

8.管理側の wp-config.phpの設定変更

 
「4.ファイルの移動」で「wp-content」フォルダを公開側に移動させましたので、この情報を設定します。
設定する対象のファイルは、管理側にある wp-config.phpです。
 
記述する場所は、「define('WP_DEBUG', false);」のすぐ下に追記をします。
ファイルの一番下に追加しても正常に動作しませんので注意してください。
 
 

8-1.定数「WP_CONTENT_DIR」「WP_CONTENT_URL」の追加

 
「4.ファイルの移動」でテーマやプラグインファイルが入っている「wp-content」フォルダを管理画面側から公開側に移しましたので、それに合わせて公開側の「wp-content」フォルダを指定します。
 

 
 

8-2.定数「WP_PLUGIN_DIR」「WP_PLUGIN_URL」の追加

 
「4.ファイルの移動」移動した「wp-content」フォルダの中には、プラグインが入っている「plugins」フォルダがありますが、これも場所を変更したい場合は変更することが可能です。
変更しない場合はこの設定は不要です。
 

 
 
これで設定完了です。
管理画面、公開画面とそれぞれの URLでアクセスしてみてください。
 
 


 
 

既存の WordPressの管理画面を分離する場合

 
既存の WordPressの管理画面を分離する方法は、新規にインストールする場合に比べて少し手間がかかります。
 
例として、以下のような想定で解説を進めます。
変更前
 公開側  http://www.example.com
 管理側  http://www.example.com/wp-login.php
変更後
 公開側  http://www.example.com
 管理側  http://admin.example.com/wp-login.php
 
 

1.管理画面の場所に環境を引越し

まず初めに、WordPressの環境を、公開側の場所から管理画面を設置する URLの場所に引越しをします。
最終的には「変更前」の環境にあるファイルはすべて削除しましょう。
 
WordPressの環境引っ越しに関しては、下記に記事を書いています。
 WordPress環境を引越し、複製、バックアップ、リストアの手順解説
 
例としては、公開側の URLから管理側の URLにファイルを移動させて、そちら側で動作するように変更します。
 公開側  http://www.example.com
 管理側  http://admin.example.com
 
 
2.以降は、「WordPressを新規で設置する場合」と同じですのでそちらを参考にしてください。
 
また、「7.メディアのファイルの保存先を変更」を行う場合は「WordPressのメディア設定でアップロードするファイルの保存場所を変更する方法」に記事を書いていますのでそちらを参考にしてください。
 
 
 

公開側と管理側とを分離した際に発生する不具合の追加対応

 
セキュリティ面では有利な方法ですので、今後新規で WordPressを設置する場合は、これを基本の設置方法とした方がいいと思えるくらいです。
 
ですが、残念ながらこの対応を行うことにより発生する不具合もあるのです。
 
具体的には、下記の問題が発生します。
 ・管理画面からプレビューするリンクが公開側のためプレビューが表示されない
 ・管理画面にログインしている情報は公開側に引き継がれない
 
そのため、これらの対応方法も解説していきます。
 
 

管理画面からプレビューするリンクを変更する

管理画面の「プレビュー」をクリックすると「下書きをプレビューする権限がありません。」などのメッセージが出る場合があります。
 
この不具合は、公開側と管理側の URLを分離することにより発生する不具合ではなく、「一般設定」の「WordPress アドレス (URL)」と「サイトアドレス (URL)」が違う場合に発生する不具合です。
 
「プレビュー」のリンクは、「サイトアドレス (URL)」に関連付けられていますが、このページにログインしている情報が引き継がれないため、プレビューが見られない、という不具合につながります。
そのため、これを管理側の URLの「WordPress アドレス (URL)」になるように変更します。
 
20160516_wp_01
 
具体的な対応内容は、下記の関数を functions.phpに追記します。
 

 
URLの部分は、各自の環境に変更してください。
また、functions.phpについては、「WordPressの functions.phpがある場所」を参照してください。
 
詳細な解説は「WordPressの投稿プレビューのURLを変更する方法」に記事を書いていますので参考にしてください。
 
 

管理画面にログインしている情報は公開側にも引き継げるようにする

「管理画面にログインしている情報は公開側に引き継がれない」不具合は、「Theme My Loginでメール認証、管理者承認付の会員管理・基本編」などを利用して、会員制サイトを構築する場合などに問題が発生します。
具体的には、最近公開した「月極駐車場検索エース」のサイト構築は無理ですし、「コメントを書くにはログインが必要です」といった仕様にする場合も問題になります。
 
ただ、公開側のコンテンツでログイン機能を利用するということは管理機能を一般ユーザに提供するということであり、今回紹介した管理側と公開側の URLを分離することと相反する内容になり、分割する意味がなくなります。
 
 
どうしても対応したい場合は、下記の 2つの手順で不具合は解消しますが...
・「wp-admin」フォルダを作成
・ドキュメントルートにおいてある「index.php」をコピーして「wp-admin」に入れる
 
 
 

リンク先が 404 Not Foundになる場合

 
リンクをクリックすると「404 Not Found」のエラーになる場合は、「2.管理画面から「パーマリンク」を変更」がうまくいっていない場合が多いです。
 
あらためて、「パーマリンク設定」の画面からパーマリンクの更新を行い、管理画面側の「http://admin.example.com」に出力される「.htaccess」の「# BEGIN WordPress」~「# END WordPress」の部分を公開側の .htaccessに編集をし直します。
 
※パーマリンクに利用される .htaccessは、公開側の index.phpを置いたフォルダの中にある .htaccessになりますので、パーマリンク設定を変更した場合は、公開側の .htaccessも更新する必要があります。
 
 


 

WordPressの管理画面と公開画面を別ドメインにすることのまとめ

 

WordPressの管理画面と公開画面を別ドメインにする前提

 
管理画面と公開画面を別ドメインにする方法ですが、「5.公開側の index.php の設定変更」で「index.php」を編集する「require()」関数で「wp-blog-header.php」を呼び出すところが一番のポイントです。
そのため、今回の例でいえば「www.example.com」の領域から「admin.example.com」の領域のファイルを require()関数で読み込める権限があることが必要です。
 
サーバの構成、設定によっては、別のドメイン、サブドメインの領域のファイルへのアクセスを制限する仕様になっている場合もあり、今回紹介した管理側と公開側を分離する方法を設定できないサーバもあります。利用できないサーバの場合はあきらめるほかありません。
当ブログのサーバは「X Server」ですが、「X Server」では問題なく利用できます。
 
 

管理画面のファイルを別ディレクトリに置くメリット

 
最初にも書きましたが、管理画面のファイルを公開側の領域とは違う領域に置くメリットは、セキュリティ面においてです。
管理画面が置いてある場所(URL)を分からなくすることができますのでセキュリティの面で格段にレベルアップします。
 
例えば、公開側の URLが
  http://www.example.com
だとすると、ログイン URLは
  http://admin.example.com/wp-login.php
  http://admin.example.com/wp-admin
となります。
 
これに対して、下記の記事で紹介している
 WordPressの管理画面ログインURLの変更方法解説
 WordPressの管理画面ログインURLファイルにBasic認証を設定する方法解説
 
などで、管理画面のファイルに極力アクセスさせないような対策を行うことで管理画面へのセキュリティ対策を行うことも可能です。
 
ですが、WordPressは「管理画面のファイルは『wp-admin』に入っている」ということは変えることができない周知の事実です。
 
そのため、管理画面へアクセスする方法がゼロではないワケです。
 
 
ですが、ここで紹介している方法を使うと、公開側のサイトの URLが「http://www.example.com」であっても「http://www.example.com/wp-admin」にはファイルの実体が存在しませんので、管理画面に直接アクセスすることできないワケです。
 
先に記事にしていた対策は、ファイルの実体はあるものの、プログラム的な処理においてアクセスさせないようにしていたのですが、今回の対策は、管理画面のファイル実体がそもそもそこにないので、不正アクセスのしようがないワケです。
 
これが今回紹介した施策との大きな違いです。
 
 

追加で行うセキュリティ対策

 
管理画面の領域全体にアクセス制限を実施しましょう。
 
例の環境ですと、「http://admin.example.com/」全体に Basic認証を設定します。
万に一つでも「http://admin.example.com/」の URLが外部に漏れたとしても Basic認証が守ってくれます。
 
さらに、IPによるアクセス制限などを設定してもいいでしょう。
 
 

追加で行うセキュリティ対策・おまけ

 
公開側
  http://www.example.com/
に対して、
  http://www.example.com/wp-admin
  http://www.example.com/wp-includes
のフォルダを作成し、そこに Basic認証を設定しておく、というのも有効な手段になるでしょう。
 
「http://www.example.com/wp-admin」の中には空の index.htmlファイルを 1ファイルおいておき、たとえ Basic認証を破って「http://www.example.com/wp-admin」にアクセスできても何もない、という仕掛けです。
 
「http://www.example.com/wp-admin」に管理画面がある、と思わせておくことで、本当の「http://admin.example.com/」を探すことすらさせない方法としてこれまた有効な手段となるでしょう。

 - WordPress

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Comment

  1. little より:

    貴重な情報ありがとうございます。参考にさせていただいたのですが、
    マルチサイトの状態で上記試してみたのですが、なかなかうまくいきません。
    上記の記事はマルチサイト無効の状態で実施されたのでしょうか?

    • エス技研 より:

      little さん、コメントありがとうございます。
      参考になって良かった、と思いましたが、マルチサイトでは検証していないですね。
      マルチサイトでサイトを構築することがほぼないためにマルチサイトの検証をすることは全く頭になかったですね...
      マルチサイトで動かないというのも盲点でしたね。
      折を見て検証をしてみたいと思いますが、試してみてうまくいかなさそうだったと言うことであれば、うまくいかないのかもしれないですね...申し訳ありません。

  2. 未熟者 より:

    このページを参考に
    2つのでメインで試しているのですが、
    うまくいきません。
    サブドメインではなく2つのドメインでもできるのでしょうか?
    例)管理用:aaa.com
      公開用:admin.aaa.com→bbb.comで実施

    それと、
    言葉だけでなく、図を入れていただけると、
    よりわかりやすいです。
    当方、経験が浅いもので、苦戦しております(汗)
    例)
    管理用②のフォルダを公開用④のフォルダへ移動する。
    管理用④のファイルを編集する。
    管理用        公開用
    ①■         ■
    ②├■        ├■
    ③├■        ├■
    ④│└□       ├■
    ④├■        └□
    ⑤└□

    • エス技研 より:

      未熟者さん、コメントありがとうございます。
      サブドメインではなく、違うドメインでも動きますよ。
      例えば、管理側はドメインを当てずに、IPのままで、と言う設定でも問題ありません。

      この対応は上級編だと思います。
      業務で開発に使っているメンバーでもすんなりはいかない事が多いので、大変だと思いますがあれこれと試してみてください!

  3. Japanese より:

    途中でミスをしてしまったのか、公開側と管理側が逆になってしまいました。
    なので管理側のサブドメインを消して公開側のドメインだけのしようと思います。

    公開側の方を元に戻す方法を教えていただけますでしょうか。

    • エス技研 より:

      Japanese さん、コメントありがとうございます。
      おそらく、「設定」-「一般設定」の「WordPress アドレス (URL)」と「サイトアドレス (URL)」の設定を間違えたのだと思います。
      そのつもりで回答しますが、この値は、データベースの「wp_options」テーブルの「siteurl」と「home」の値がそれになります。
       
      データベース管理ツールの phpMyAdminなどがあれば、それを利用してデータベースに接続していただいて、「wp_options」テーブルの値の一覧を表示させてみてください。
      その中に「option_name」の値が「siteurl」と「home」のレコードがあると思います。
      そのレコードの「option_value」の値が、それぞれ「設定」-「一般設定」の「WordPress アドレス (URL)」と「サイトアドレス (URL)」の設定値になっていますので、その値を修正してみてください。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

WordPress管理画面のメニューに項目を追加する方法解説

WordPressの管理画面のメニューに項目を追加する方法をサンプルソースを交えて解説します。

ob_start、ob_get_contentsを利用しショートコード内でinclude・WordPressプラグイン開発

WordPressのプラグインやショートコードの関数作成でテンプレートをincludeする際に利用するob_start関数、ob_get_contents関数を紹介。

WordPressのパーマリンク設定の考え方

基本設定の一つであるパーマリンクの設定について解説。パーマリンクはURLを決定づける重要な項目ですので、設定の意味を理解して希望するURLになるよう設定しましょう。

WordPressの不正ログインを Force email loginで回避

WordPressのセキュリティ強化に Force email loginを使う理由と設定方法の解説をしています。

プラグインが原因で起動しないWordPressを復旧させる方法解説

プラグインが原因で WordPressが起動できなくなった、ログインできなくなった場合の対処方法の解説です。

PoeditでWordPressの日本語対応方法。英語プラグインの日本語翻訳ファイル作成

プラグインの日本語化の手順のまとめ。.pot、.po、.moファイルの解説や便利ツールの Poeditの紹介を行いつつ、手順、ファイル設置場所、注意ポイントなども紹介。

WP Customer ReviewsでWordPressにオリジナルの口コミサイトを構築

口コミサイトを構築するためのプラグイン。独自フォームによるレビュー、評価点を投稿でき、入力項目の追加もできます。

WordPressでダブルクォートなどの文字が自動変換?原因と対処方法

ダブルクォート、シングルクォート、HTMLタグなどが自動変換関数によって入力と違う形で表示されます。原因を2つの関数ごとに説明し、対応方法を3パターン提示します。

WordPressのカスタムフィールド、カスタム投稿、カスタムタクソノミーとは?

WordPressのカスタムフィールド、カスタム投稿、カスタムタクソノミーの基本的な内容を解説。お薦めのプラグインと編集方法も解説しサンプルソースなども紹介。

WordPress データベースを管理するための強い味方のプラグイン WP-DBMANAGER

データベースを管理するための強い見方のプラグイン「WP-DBMANAGER」の使い方の説明です。