これまで何度もやってきた作業ですが、今後作業する際のチェックシート代わりと、今回作業するに当たって躓いた点があったので、それについても記載しておきたいと思います。
リニューアル公開までの流れ
前提
- 現在のWordPress(現行サイト)を設置しているサーバーを旧サーバー、新しいWordPress(リニューアルサイト)を設置するサーバーを新サーバーとする。
- ドメインは独自ドメインで、現行サイト・リニューアルサイト共に同じものを使用する。
手順
- 新サーバーに普通にWordPressを設置し、サイトを構築する。
この時、テンプレート内に記述するパスは、相対パスまたはget_template_directory_uri関数を用いて、WordPressにアクセスする際のURLのドメインやディレクトリ階層が変わっても支障が無いようにしておく。また、WordPressはドキュメントルート直下ではなく、ドキュメントルート直下に設置したサブディレクトリ内に設置するのが望ましい。(その際、サイトURLはサブディレクトリをURLから除去したものにしておく) - 新サーバーのIPアドレスを調べ、ドメインとIPアドレスをPCのhostsファイルに記載し、DNSのAレコード修正前でも既存のドメインで新サーバーに繋がるようにする。
- リニューアルサイトのWordPressのWordPressアドレス(インストール先URL)とサイトアドレス(アクセスURL)のドメイン部分を独自ドメインに変更する。
この方法は、管理画面から書き換える・phpMyAdminからoptionテーブルのレコードを書き換える・wp-config.phpに記述してアップロードする、以上の3通りある。
最も簡単なのは1つ目だが、間違えた際を考慮して2また3つ目のやり方も出来るようにしておく。 - 独自ドメインのURLで リニューアルサイトの管理画面ログイン画面にアクセスしてみる。
ここで起きる問題の一例として、前項の”3″で設定した内容のミスによりリンク切れが発生して画面が崩れたりする。その場合はphpMyAdminかwp-config.phpによる修正が必要となる。 - 管理画面にログインしたら、パーマリンク設定の画面に移動し、何も変更せずに保存する。これを行わないと、正しい.htaccessが生成されず、正常にアクセス出来ない問題が発生することがある。
- 公開側のページ(フロントページ・固定ページ・投稿ページ)にアクセスして、問題が無いか確認する。
- 問題が無ければ、DNSのAレコードを新サーバーのIPアドレスに修正する。
書き換えたhostsファイルは元に戻しておく。暫くすると、これまでと同じドメインで新サーバーに繋がるようになる。 - その後は常時SSL化などの作業を行う。
作業時に躓いた点
wp-config.phpでの設定が反映されない
DNSレコード編集によるドメイン接続先変更前に、PCのhostsファイル書き換えによる独自ドメインでの接続・表示チェックの為に、一時的にWordPressに設定したドメインを変更するべくwp-config.phpにWP_SITEURLとWP_HOMEを記述した。
/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */
define('WP_SITEURL', 'http://www.example.com/wp');
define('WP_HOME', 'http://www.example.com');
/* 編集が必要なのはここまでです!WordPressでのパブリッシングをお楽しみください。 */
しかし、WordPress側に反映されず。記述場所は間違っていないはずだが、下記のように修正。
define( 'WP_DEBUG' false );
define('WP_SITEURL', 'http://www.example.com/wp');
define('WP_HOME', 'http://www.example.com');
すると何故か500エラーに。すぐに元に戻し、原因について調査すると「UTF-8のBOM付きで保存すると不具合が出る」との文献を発見。
メモ帳で開いてそのまま編集していたものの、メモ帳はBOMありなし両方に対応しており、メモ帳での編集が原因とは考えにくかったが、VSCodeで開いて下記のように修正。
define( 'WP_DEBUG' false );
define('WP_SITEURL', 'http://www.example.com/wp');
define('WP_HOME', 'http://www.example.com');
/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */
これで一応問題は解決した。
フロントページ(トップページ)以外にアクセス出来ない
フロントページは独自ドメインで表示出来るが、それ以外のページが全て500エラーとなった。
ログを確認すると”Request exceeded the limit of 10 internal redirects due to probable configration error”というエラーが出力されており、リダイレクトループが発生していた。
.htaccessの原因が疑われた為、WordPressの管理画面にてパーマリンクを設定変更なしで保存。これにより.htaccessが更新され、結果的に問題は解決した。
もう少し詳しく説明
今回は、さくらインターネットのマルチドメイン(特定のディレクトリを特定の独自ドメインのドキュメントルートとして割り当て、1つの契約で複数のドメインを運用する仕組み)で設置する為、ルートディレクトリwwwにfooというディレクトリ(独自ドメインでのドキュメントルート)を作り、fooディレクトリの中にwpディレクトリを作り、そこにWordPressをインストールした。
さらに、WordPressのindex.phpと.htaccessはwpディレクトリの中からfooディレクトリ直下にコピーして配置して、将来的にサブディレクトリを含まないURLでアクセスできるようにした。(index.php内のパスは”‘/wp/wp-blog-header.php'”に変更済み)
WordPressアドレスとサイトアドレスは下記の通り。
WordPressアドレス(site_url):http://さくら初期ドメイン/foo/wp
サイトアドレス(home_url):http://さくら初期ドメイン/foo
パーマリンク保存作業前のfoo/.htaccessは下記のようになっていた。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /foo/
RewriteRule ^index¥.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /foo/index.php [L]
</IfModule>
# END WordPress
この状態で、wp-config.phpによって強制的にドメイン及びURLを書き換えたところ、リダイレクトループが発生した。
define('WP_SITEURL', 'http://www.example.com/wp');
define('WP_HOME', 'http://www.example.com');
そして、管理画面からのパーマリンク保存作業によって書き換えられた.htaccessは下記の通り。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index¥.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
RewriteBaseとRewriteRuleの部分において、”foo/”という文字列が消えている。
これはつまり、今回設置したfooディレクトリは(マルチドメイン機能によって)独自ドメインのドキュメントルートになる為、サブディレクトリを記述してはいけないということである。