【WP】1つのドメインに複数サイトを構築手順+ハマったところ

昨日からいろいろと引越し作業をしているのですが、複数のサイトを1個のドメイン内に階層構造にしようとしたところハマった部分があったのでメモしておきます。すべてワードプレスのサイトです。

イメージとしては以下のようにしたい。

https://bey.jp/      ←メインサイト https://bey.jp/sub1/  ←サブサイト https://bey.jp/sub2/  ←サブサイト このように既存のメインサイトの下にディレクトリを作っていくつかのサブサイトを引越ししてみます。

ワードプレスのサイトまるごとコピー

サブサイトメインサイトのサーバーにコピーします。 サブサイトメインサイトと同じ場合は特にコピーしなくてもOKです。 今回は、2つのCoreserver間でお引っ越しやってみました。 ScreenClip

メインサイトのサーバー管理画面に入って、「サーバー間コピー」のページを表示します。 サブサイトが置いてあるコピー元サーバーの情報を記入していきます。

  • FTPユーザー名:サブサイトのサーバー管理画面の左上「管理メニュー」の下に書いてあるID:●●の部分
  • FTPパスワード :サブサイトのサーバー管理画面 「FTP設定」の画面にあります。
  • FTPサーバー名:▲▲.coreserver.jp ▲の部分はサブサイト管理画面「項目の説明・仕様」の画面の「サーバー名」の部分
  • リモートディレクトリ: コピーするサイトのディレクトリ 例:/public_html/subsite.com
  • ローカルディレクトリ:メインサイトのサーバーに置くディレクトリ 例:/public_html/bey.jp/sub2 など、この時指定したディレクトリが無い場合はコピーされません!予めディレクトリを作っておきましょう。

WPのデータベースダンプ

サイトのコピーと同時にサブサイトのデータベースもダンプしておきます。 phpMyAdminにログインします。CoreserverでphpMyAdminにログインするには、 ScreenClip

データベース画面表示 Coreserver管理画面 左メニューの上記の位置にあります。 ScreenClip

データベースのページの下のほうにphpMyAdminのログインリンクがあります。 ScreenClip phpMyAdminを開いてエクスポート画面ですべてのテーブルをダンプしましょう。

メインサイトのサーバーにMySQL DBを作成してインポート

ダンプができたらメインサイトのCoreserver管理画面のログインしてMySQLのデータベースを作成します。 ScreenClip MySQLの追加・編集のところのIDとパスワードと記入して、文字コードはUNICODEにします。作成ボタンを押せばデータベース作成完了 つぎにphpMyAdminにログインして ScreenClip インポートのページでサブサイトでエクスポートしたファイルを選んで実行するとテーブルがすべてコピーされます。

2つのファイルの設定をFTPでする

サブサイトメインサイトの下にコピーできたらFTPクライアントやWinSCPとかでメインサイトのサーバーにログインして/public_html/bey.jp/sub2 ←サブサイトを新しく置く場所 こちらに行きます。 ScreenClip WinSCPでログインしました。こんな感じに新しく設置するサブサイトのファイル郡が表示されます。

サブサイトのwp-config.phpの設定

session.save_pathがある場合は以下も変更

ini_set("session.save_path", "/virtual/ユーザー名/public_html/bey.jp/sub2/session"); 

新たに作ったデータベースのデータベース名、IDとPass

define('DB_NAME', 'ユーザー名_sub2'); define('DB_USER', 'ユーザー名_sub2');
define('DB_PASSWORD', 'パスワード');

サブサイトの.htaccessの設定

ここが今回ハマったところです! パーマリンク設定でカスタム構造を選択した場合は注意が必要です。 ScreenClip

ワードプレス管理画面 設定>パーマリンク設定の画面 この状態の時に、サブサイトのトップは表示できますが、ページがうまく表示されない場合があります。

https://bey.jp/sub2          ←正常に表示される。

https://bey.jp/sub2/sample-page ←表示されない!

僕の場合は404ではなくメインサイトの「条件に合う投稿はありませんでした。」表示されてしまいました(汗)

いろいろ探して解決したのでメモしておきます。

ワードプレスのデフォルトでは以下のようになっていると思います。

 # 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 

上記を以下のように変更

# BEGIN WordPress
<IfModule mod_rewrite.c> 
RewriteEngine On RewriteBase /sub2/ RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /sub2/index.php [L] 
</IfModule>
 # END WordPress 

青い部分が追加されたところです。

sub2」は新しくサブサイトを設置したディレクトリ名です。

もしかしたら自動でワードプレスが変更したかもしれませんが一応チェックしてみてください。 これをやらないとパーマリンク設定のリンクの仕方だと正常に表示されないと思います。

パーマリンク設定での不具合 他のやり方

http.confに追加などという記事もあったがそもそもCoreserverはDirectoryはいじれない仕様なのでちょっとこれは変更できませんでした。

他のサーバーでは有効かもしれません。

 <Directory "/server/public_html/bey.jp/sub2">
    AllowOverride All 
</Directory> 

これをhttpd.confの下のほうに追加すれば良いようです。未確認

データベースを修正

MySQLデータベースを引越し先の環境に合わせて変更します。
これはMySQLのテーブルを直接いじるとうまくいかない場合がありますので、ツールを使って変更します。
 
これを実行するとすべて引越し先の設定になりますので引越し前の状態でなにもいじらず運用できます。
 
まずは以下からツールをダウンロードします。
 
ScreenClip
アクセスしたらページ中ほどの「Problems? Try v 2.1.0 STABLE」をダウンロードします。
上の、3.0.0BETAは多機能?すぎてよく分からなかったので2.1.0を使います。
ダウンロードして解凍すると以下のファイルが1個でてきます。
ScreenClip

searchreplacedb2.phpです。これをそのままサブサイトのディレクトリにアップロードします。

例: /virtual/ユーザー名/public_html/bey.jp/sub2 ScreenClip

こんな感じです。 

そしたらサブサイトのsearchreplacedb2.phpにブラウザからアクセスします。 例:https://bey.jp/sub2/searchreplacedb2.php ScreenClip

最初にこんな画面がでますので「Submit」を押します。 ScreenClip

次の画面ではデータベース情報が自動で表示されますので確認してください。 ScreenClip

次もテーブルの確認です。確認したらContinue ScreenClip

最後に変更点を記入します。

  • Search for  :以前のドメイン名 例:hogehoge.com
  • Replace with:新しいサイトの場所 例:bey.jp/sub2

間違わないように確認してくださいね。 終わったらSubmit Search stringボタンを押します。

ScreenClip

成功すると上記のように表示されます。

ただ、成功してもたまに全部の設定を変更できてない場合もありますのでサイトを確認しておかしい?と思ったら再度実行してみてください。

旧ドメインサイトをリダイレクト

引越し先のサイトが正常に表示・稼働を確認できましたら旧ドメインのサイトを301リダイレクトします。

.htaccessを以下のように変更してアクセスをすべて301リダイレクトで引越ししたことを伝えで同時に新しいサイトに飛ぶようにします。

<IfModule mod_rewrite.c>
RewriteEngine On RewriteCond %{HTTP_HOST} ^(旧ドメイン\.com)(:80)? [NC]
 RewriteRule ^(.*)$ http://bey.jp/sub2/$1 [R=301,L] 
 </IfModule>  

久しぶりにサーバーとかいじってかなり楽しい・・・

やっぱりオタクですね(^_^;) たまにいじるから良いのかもしれませんが、いろんな便利なツールがでてきて手間なくできるようになったのは嬉しい限りです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする