WordPressの管理画面をCDN用に別ドメイン(ホスト名)を使って運用する方法


WordPressの管理画面は通常、トップページ配下の「wp-admin」でアクセスします。管理画面のURLが分かってしまうのであまり宜しく無いと言うのは既知の問題ですが、今回ドメイン全体をCDNを使ってコンテンツ配信する設定に変更した際にキャッシュの問題に直面しました。

「wp-admin」ディレクトリをCDNにキャッシュさせない除外設定にしたとしても、管理画面にアクセスする度に「サーバ → CDN → ブラウザ」とCDNを経由してしまうのでレスポンスが悪くなりますし、キャッシュされないとしてもCDNを経由する事に変わりないのでセキュリティ的にあまり良くありません。

そこで、当サイトの通常のWordPressアドレス「https://www.kojinteki.net/」からWordPressの管理画面の部分のみを別のディレクトリでかつ別のホスト名に変更したので方法をシェアします。


ドメイン(ホスト名)の仕様

・ブログサイト https://www.kojinteki.net/
・通常の管理画面 https://www.kojinteki.net/wp-admin/

・ブログサイト配下の「wp-admin」フォルダを除去する
・変更後の管理画面 https://wp-admin.kojinteki.net/wp-admin/

※ご自身の環境に置き換えてください。


ドキュメントルートの仕様

・ブログ用ドメイン www.kojinteki.net
/home/■■■/www/kojinteki.net/

・管理画面用ドメイン wp-admin.kojinteki.net
/home/■■■/www/wp-admin.kojinteki.net/

※ご自身の環境に置き換えてください。


管理画面用のドメインを基準にする

既存のWordPressサイトのドメイン設定を「管理画面用」のものに変更してください。管理画面用のドメインで正常にアクセス出来る状態にします。管理画面用のファイルの一部をブログ用ドメインにコピーまたは移動する形となります。

当サイトの場合「https://wp-admin.kojinteki.net/」でアクセスすると、今までのブログが表示され「https://www.kojinteki.net/」でアクセスすると、何も表示されない状態に変更します。


「wp-content」をブログ用ドメインに移動する

/home/■■■/www/wp-admin.kojinteki.net/wp-content を
/home/■■■/www/kojinteki.net/wp-content へ移動します。

FTPソフトやファイルマネージャーなどを使います。移動(move)ができない場合にはコピー後に元のフォルダを削除してもかまいません。


「index.php」と「.htaccess」をコピーする

管理画面用のドメインから「index.php」と「.htaccess」をブログ用ドメインにコピーします。

ブログ用ドメインのドキュメントルートには以下の3項目が並びます。

  • .htaccess
  • index.php
  • wp-content

ブログ用ドメインの「index.php」を編集します

コメントを除いて、2行の追加と、1行の変更があります。

<?php

define('WP_USE_THEMES', true);

//---ブログ用ドメイン
define('WP_HOME', 'https://www.kojinteki.net');

//---管理画面用ドメイン
define('WP_SITEURL', 'https://www.kojinteki.net');

//---管理画面用ドメイン内の「wp-blog-header.php」へのパス
require '/home/■■■/www/wp-admin.kojinteki.net/wp-blog-header.php';

「index.php」を編集後にアップロードします。


管理画面用ドメインの「index.php」を編集します

コメントを除いて、2行の追加があります。

<?php

define('WP_USE_THEMES', true);

//---ブログ用ドメイン
define('WP_HOME', 'https://wp-admin.kojinteki.net');

//---管理画面用ドメイン
define('WP_SITEURL', 'https://wp-admin.kojinteki.net');

require __DIR__ . '/wp-blog-header.php';

「index.php」を編集後にアップロードします。


管理画面用ドメインの「wp-config.php」を編集します

コメントを除いて、4行の追加があります。

/* ~ここまで省略 */

define('WP_DEBUG', false);

//---ブログ用ドメイン
define('WP_HOME', 'https://wp-admin.kojinteki.net');

//---管理画面用ドメイン
define('WP_SITEURL', 'https://wp-admin.kojinteki.net');

//---「wp-content」ディレクトリの指定
define('WP_CONTENT_DIR', '/home/■■■/www/kojinteki.net/wp-content');
define('WP_CONTENT_URL', 'https://www.kojinteki.net/wp-content');

/* これ以降省略~ */

「wp-config.php」を編集後にアップロードします。


options.phpの設定変更

管理画面用ドメインの「wp-admin」にアクセスしてログインします。

隠し設定項目にアクセスするためにURLに「options.php」を付与して、「https://wp-admin.kojinteki.net/wp-admin/options.php」にアクセスします。

・「upload_path」を検索して、入力欄に
/home/■■■/www/kojinteki.net/wp-content/uploads と入力します。

・「upload_url_path」を検索して、入力欄に
https://www.kojinteki.net/wp-content/uploads と入力します。

入力後設定を保存します。


「wp-includes」へのシンボリックリンクを貼る

「wp-includes」は基本的に管理画面用ドメイン内に存在しており「wp-content」のように配置を変更するオプションも存在しないので、シンボリックリンク(ショートカット)で対応します。

/home/■■■/www/wp-admin.kojinteki.net/wp-includes から
/home/■■■/www/kojinteki.net/wp-includes へのシンボリックリンクを作成します。

シンボリックリンクの作り方が分からない方は、以下のプログラムを「index.php」と同じ階層に「symlink.php」として設置して、ブラウザからアクセスしてください。シンボリックリンク作成後に「symlink.php」は不要なので削除してください。

<?php

$admin_wp_include_dir = '/home/■■■/www/wp-admin.kojinteki.net/wp-includes';
$blog_wp_include_dir = '/home/■■■/www/kojinteki.net/wp-includes';

if(!is_link($blog_wp_include_dir)){
	if(symlink($admin_wp_include_dir , $blog_wp_include_dir)){
		echo "symlink Create OK";
	} else{
		echo "symlink Create NG";
	}
} else{
	echo "symlink OK";
}

生成に成功するとブログ用ドメイン内のドキュメントルートに以下の4項目が並びます。

  • .htaccess
  • index.php
  • wp-content
  • wp-includes

管理画面用ドメインへのクローラアクセスを禁止する

管理画面用ドメインにアクセスすれば一目瞭然ですが「https://wp-admin.kojinteki.net/」でもブログ用サイトと同じ内容が表示されています。クローラに補足されたら面倒なので.htaccessでクローラのアクセスを禁止します。

SetEnvIf User-Agent "Googlebot" denybot
SetEnvIf User-Agent "Slurp" denybot
SetEnvIf User-Agent "bingbot" denybot
SetEnvIf User-Agent "msnbot" denybot
SetEnvIf User-Agent "Yandex" denybot
SetEnvIf User-Agent "DuckDuckBot" denybot
SetEnvIf User-Agent "Mappy" denybot
SetEnvIf User-Agent "proximic" denybot
SetEnvIf User-Agent "Twitterbot" denybot
SetEnvIf User-Agent "applebot" denybot
SetEnvIf User-Agent "blogmuraBot" denybot
SetEnvIf User-Agent "SemrushBot" denybot
SetEnvIf User-Agent "AhrefsBot" denybot
SetEnvIf User-Agent "BLEXBot" denybot

order allow,deny
allow from all
deny from env=denybot

上記の内容を「管理画面用ドメイン」の「.htaccess」に追記しました。

自分自身が特定の環境でしかアクセスしないのであれば、パスワードで制限したりIPアドレスで制限する方が確実です

以上で、基本的な設定は終わりです。うまく表示されましたか?当ブログもそのままの設定で運用しておりますので、何か不具合があればこの記事に追記します。


(追記)2020-06-15

・「SNS Count Cache」というプラグインが動作しなくなりました。ドメイン名を管理画面用の「wp-admin.kojinteki.net」から変更できない為です。特に無くても困らないのでプラグインは削除しました。


(追記)2020-06-22

・「https://www.kojinteki.net/wp-admin/」にアクセスすると、リダイレクトループが発生して「404 Not found」となっていなかったので、テーマファイルの「functions.php」に以下の管理画面の余計な転送を行わない記述を追加しました。

remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);

https://www.kojinteki.net/wp-admin/
https://www.kojinteki.net/wp-login.php

設定を追加後に問題なく「404 Not found」となりました。