兄弟ブログのキャンプブログを引っ越ししました。
サブドメインでやってみたのですが、やっぱりサブディレクトリ構造にしてみたくなったので、アクセスがまだ少ない今のうちに変えておこうと思いました。今後増えてくれるかは謎なですが・・・。
旧URL http://outdoor.normalblog.net/
↓
新URL http://normalblog.net/outdoor/
参考手順にしたのは以下です。
https://normalblog.net/system/wordpress/wordpress_local_environment/
ファイルコピー
WordPressが設置されていた旧ディレクトリを新ディレクトリに先ずコピーしました。
# cp -pr old/ new/
DBのパス変換
WordPressの記事は全てDBに保管しておりますので、リンクなどのURL変換をしてあげる必要があるのですが、以下のツールで一発で置換出来ました。
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
ダウンロードした「Search-Replace-DB-master」ディレクトリを↑の方で設定した.htaccessがあるディレクトリに配置します。
新URL/Search-Replace-DB-master でブラウザからアクセスすると、ツールの変換画面が表示されます。
replace に変換前のURL(http://を除外) ex.旧URL
with に変換後のURL(http://を除外) ex.新URL
注意事項
http:// や 最後の/ をつけたまま変換しない事!
ついていないデータもあるので変換漏れURLが発生してしまいます。ローカル環境内に一部本番URLが入っていたりする事に・・・。
あとはdatabaseのname user pass host portを入力して、dry runボタンで確認し、live runボタンで変換します。
変換が終えたらこの「Search-Replace-DB-master」ディレクトリは削除しておきます。
もし削除し忘れると、誰かにアクセスされてDBのパスが更新される可能性があります。
.htaccessの修正
ここまででTOPまでは表示されたのですが、記事などのページが404になってしまい、前にも同じ事があったなと思い出しました。以下の設定が必要でした。
旧URL http://outdoor.normalblog.net/
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ ./index.php [L]
</IfModule>
これを以下に変更しました。↓
新URL http://normalblog.net/outdoor/
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /outdoor
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ ./outdoor/index.php [L]
</IfModule>
これで完了です。
旧URLから新URLへリダイレクト設定
あとは旧URLから新URLへリダイレクト設定をしました。アクセスが途切れてしまうのである程度進んだサイトでは必要と思われます。
旧.htaccessの先頭行に以下を記載してparmanent(恒久的な)301リダイレクト設定をしました。
# 301 Redirect Redirect permanent / http://normalblog.net/outdoor/
これで旧URLのブログ記事も、同じ階層の新URLのブログ記事へリダイレクトしてくれます。

