外部WordPressをVagrantに移動したら「The requested URL /index.php was not found on this server.」

この記事は最新更新日から、5年以上経過しています。

概要

wordpressで作った下記アドレスのサイトをvagrantで右のURLとして表示しようとしたら手間取った。
http://aaaa.example.com → http://192.168.33.10/aaaa

 → http://192.168.33.10/bbbb

どっちも元サーバーでは同じディレクトリに下記のような形でWordPressが入っていたのでそのままコピーしても動くだろたぶん!と思っていた
/home/aaaa/wp
/home/bbbb/wp

しかしコピーして、DB書き換えて、mod_rewrite等の設定をしてデータベースを置換しても「The requested URL /index.php was not found on this server.」として動かなかったのでその対応記録。

どうやらWordPressまでのパスがドメインに対して /wp だったのに対し、
仮想環境移動後は /aaaa/wpになっているので、/aaaa/ 内の.htaccessを合わせて書き換える必要があったようだ。

環境

CentOS Linux release 7.6.1810 (Core)
mysql Ver 14.14 Distrib 5.6.43, for Linux (x86_64) using EditLine wrapper
Server version: Apache/2.4.6 (CentOS)
PHP 7.1.26 (cli) (built: Jan 9 2019 08:02:33) ( NTS )

やったこと

まずやりたいことを確認

データベース
Aサイト元アドレス:http://aaaa.example.com
vagrantでのドキュメントルート → /var/www/html/aaaa/wp
vagrantでアクセスしたいURL → http://192.168.33.10/aaaa

Bサイト元アドレス:https://bbbb.example.com
vagrantでのドキュメントルート → /var/www/html/bbbb/wp
vagrantでアクセスしたいURL → http://192.168.33.10/bbbb

とりあえずドメインをIPに置換

データベース内のドメインを置換する。
置換には「Search Replace DB」を使った(英語)
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
使い方はこの記事の一番下あたりを参照

左のアドレスを右のように置換
http://aaaa.example.com → http://192.168.33.10/aaaa
aaaa.example.com → 192.168.33.10/aaaa

Bサイトの方、SSLが入っているので全部置換できるようにする
https://bbbb.example.com → http://192.168.33.10/bbbb
http://bbbb.example.com → http://192.168.33.10/bbbb
bbbb.example.com → 192.168.33.10/bbbb

mod_rewriteなどを有効化

(いつもfindで探すけど良くないと思う)
たぶん /etc/httpd/conf/httpd.conf の方だろうとあたりを付けて編集

# find / -name 'httpd.conf'
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
# vi /etc/httpd/conf/httpd.conf

httpd.confの中身の書き換え

#Options Indexes FollowSymLinks #コメント化して削除
Options -Indexes #追加

index.phpを追加

<ifmodule dir_module="">
DirectoryIndex index.html index.php #index.phpを追加
</ifmodule>

この記事を参考にAllowOverride NoneをALLにして回る
4箇所ぐらいある(本当はドキュメントルートのパスのところだけ変更すればいいらしい)

#AllowOverride None #コメント化して削除
AllowOverride All #追加

各サイトのルートディレクトリの.htaccessの変更

【Aサイト】
/var/www/html/aaaa/wp
・wordpressのインストールティレクトリをこことする
・ここの.htaccessはそのまま

/var/www/html/aaaa
・このディレクトリの.htaccessの中身を下記のようにする

たぶんこうなっているので

# 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 /aaaa #aaaaを増やす
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /aaaa/index.php [L] #aaaaを増やす
</ifmodule>
# END WordPress

【Bサイト】
/var/www/html/bbbb/wp
・wordpressのインストールティレクトリをこことする
・ここの.htaccessはそのまま

/var/www/html/bbbb
・このディレクトリの.htaccessの中身を下記のようにする

たぶんこうなっているので

# 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 /bbbb #bbbbを増やす
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /bbbb/index.php [L] #bbbbを増やす
</ifmodule>
# END WordPress

これでアクセスしたら正常に表示された。よかった…。

途中でなぜかDBにアクセスできなくなり
「ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)」
と出ましたが下記を行ったらなんとかなりました。
https://qiita.com/ma_me/items/ae449ad8a2c424665310

おわり。