[WordPress]サーバーのWordPressをlocalhostに移行するときに詰まったこといろいろ
サーバーで動いているWordPressを一旦localhostに持ってきて、ローカル環境で色々いじることになった。
移行の仕方自体はいろんなサイトで解説してるから、それ見ながら移行作業してたんだけど、なかなかスムーズにはいかなかった。
まずは全部のファイルをそのままローカルのフォルダにコピーする。
ローカルホストではいくつかのサイトを管理しているので、ローカルホストの構成は以下のようになっている。
「http://localhost」でアクセスするとhtdocs以下が表示される。
htdocs
├ wordpress
├ wordpress2
├ mysite
└ ...
今回はリモートのWordPressの中身を全部「htdocs/wordpress」にコピーする。
まぁここまではいい。
SQLの書き換え
そしたらSQLをいろいろと置換する必要が出てくるんだけど、まさかここでSublimeTextが悪さするとは思ってなかった。
どうもSublimeTextが保存するときに改行文字とかを勝手に書き換えてしまうみたいで、それのせいでインポートエラーを起こしていた。
全然気づけなかった・・・完全にSublimeText信用してた。Vimで何とかなった。
ちなみにSQLは、
○○.com → localhost/wordpress
と置換するだけで大丈夫。「home/usr/~/wordpress」みたいな、サーバー上のパスは置換する必要がないみたい。
.htaccessの書き換え
後、やっぱり.htaccessとプラグインが曲者。
これに気付くまではSQLが悪いんだと思って、ずっとあれこれ置換し続けて時間食った。くっそ~
独自ドメインをlocalhostドメインに変えただけじゃ足りなかった。
RewriteBaseも書き換えないとダメだった。
独自ドメインを使ってた時は「RewriteBase /」になっている。
この時、「https://blog.ashija.net/2017/10/06/post-2347/」というURLでアクセスされると、「RewriteBase /」によって書き換えの対象になるのは「2017/10/06/post-2347/」になる。
ここは「RewriteCond %{REQUEST_FILENAME}」でファイルだと認識されるため、書き換えが起こらず、結果的に「https://blog.ashija.net/2017/10/06/post-2347/」にアクセスできる。
しかし(僕の環境での)ローカルホストの場合、「http://localhost/wordpress/2017/10/06/post-2347/」とアクセスされると、「RewriteBase /」によって書き換えの対象になるのは「wordpress/2017/10/06/post-2347/」になる。
この時、おそらく「wordpress/2017/10/06/post-2347/」がファイルかフォルダとして認識されない。
よって書き換えが発生し、最終的なURLが「http://localhost/index.php」となるので、目的のサイトは表示されない。
%{REQUEST_FILENAME}はリクエストURLにマッチしたファイルのフルパスだという事になってるが、コンテキストによって出力が変わるらしい。
フルパスだったら「wordpress/2017/10/06/post-2347/」でもファイルだとマッチしそうなものだけど、たぶんコンテキストによって検索範囲が変わっているんだろう(違ってたらごめん)。
そこまでしっかり読んでないけど、コンテキストによって%{REQUEST_FILENAME}の出力が変わる話は以下のサイトによくまとまっている。
というわけでこの不具合を防ぐためには「RewriteBase /WordPress/」のようにしないといけない。
そうするとRewriteRuleも変わる。
結局、全体的には以下のような感じになる。
1 2 3 4 5 6 7 8 9 | # 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> |
1 2 3 4 5 6 7 8 9 | # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L] </IfModule> |
もちろん全ての.htaccessを確認する必要がある。
画像フォルダの.htaccessのrewritecondが前のままだったせいで、画像のパーミッションは全てあってるのに画像が表示されなくなる、ということもあった。
さらに、「All In One WP Security」が自動で生成する.htaccessの記述が悪さしていて、画像のリンクが切れていた。
まさかこのプラグインが生成する設定事項の中にまでドメイン名が使われてるとは思わなかった。
これも気づくまでSQLと.htaccessが悪いんじゃないかって苦悩してた。くそ~。
これに関しては、ここまでくればダッシュボードにアクセスできるようになっているはずなので、このプラグインをいったん停止して、また有効化すれば.htaccessの記述が正しいものに直る。
これでやっと引っ越し完了。
移行について書いてあるページだと、みんなそこまで苦労してないしプラグインの事とかも手順に書いてないけど、みんなこういう現象に会わなかったのかな?
この記事へのコメントはこちら