CPIでWordPressのパーマリンクを変更後、403や500になった一連の対処法
はい、ごめんください。コスギスの小杉です。
WordPress が大好きです。WooCommerce の案件をいただいたものの、日本語情報が少なくて四苦八苦していますが、やりたいことをサクサク実現できるのでハマりそうです。
さて、今日の本題は WooCommerce ではなく、KDDI の共用レンタルサーバー「CPI」の、「シェアードプラン ACE01」で WordPress を公開時につまづきまくった際の対処メモです。
CPI のクセにつまづく方は少なくないらしく、検索したら色々と出てきたのですが、私の場合は一難去ってまた一難(ぶっちゃけありえない♪)という状態だったので、似たような状況の方の参考になれば幸いです。
前提:WordPress の構築はソフトライブラリから
「ウェブコントロールパネル」から、テストサイトに WordPress をインストールしました。
ホーム > テストサイト用設定 > ソフトライブラリ > CMSインストーラー > WordPress
と進んでいけばインストール画面になります。
個人的にはドキュメントルートにインストールすることは少ないため、サブディレクトリ(例:wordpress)を作って、WordPress をサクッとインストール。
ここは特につまづいた記憶はありませんが、サブディレクトリに作られた設定ファイルの対処に追われるとは、この時は知る由もありませんでした・・・
なお、公開前なので Basic 認証をかけましたが、管理画面を使わず、.htpasswd ファイルを別途作って対応しています。
さあ公開!
テストサイトの構築があらかた問題ないと判断したため、公開することにしました。CPIにはスマートリリースがあって便利ですよね。
ということで、ユーザーポータルの SmartRelease から、テスト環境をリリース!・・・しばらく待っていると、公開環境に上書き移行されます。
この時はまだテスト環境のURLの設定は入ったままで、HOME_URL もテスト環境のサブディレクトリのままでした。
公開サイトのサブディレクトリではテスト環境と同様に動いて、管理画面も問題なくアクセスできます。
そう、ここでパーマリンクを変更する前までは、何の問題もなかったのです。
パーマリンクを変更したら 403 Forbidden
→ アホな見落としに気づいてすぐ解決
設定を変えれば、真っ白になるかエラーになるかは覚悟していたので、パーマリンクを変更したら、慌てず騒がず index.php と .htaccess をルートディレクトリにコピーして、設定を書き換えます。
公式でもアナウンスされている、この手順です。
参考:WordPress を専用ディレクトリに配置する – WordPress Codex 日本語版
が、無情にも表示される 403 Forbiddon 。
おかしいな?と首を傾げてグーグル先生に尋ねると、
CPIで403エラーになる時は、.htaccess に次の1行を入れると解決するよ!
Options +SymLinksIfOwnerMatch
入ってる!すでに入ってるよ!!
ソフトライブラリからインストールした WordPress の場合、.htaccess の # BEGIN WordPress の前には、以下のような設定がすでに入っています。そりゃそうです、テストサイトではちゃんと動いているのですから。
AddHandler x-httpd-php5619 .php
suPHP_ConfigPath /home/ユーザID/html/wordpress/
<FilesMatch "^(\.htaccess|\.htpasswd|php\.ini|.*\.sql|.*\.log|.*\.cron|.*\.inc|.*\.phps|.*\.yml)$">
Deny from all
</FilesMatch>
Options +SymLinksIfOwnerMatch
しかしエラーは
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: 〜〜
が出てまったく変わらず。
おかしいな・・・と思って何度も .htaccess を書き換えても変わらないので、一度FTPを閉じてつなぎ直そうとして、テスト環境で一生懸命 .htaccess を変更していることに気づきました。
本番環境につなぎ直して、index.php や .htaccess の設定を変更したら、403エラーはなくなりました・・・orz
しかし 500 Internal Server Error があらわれた!
403エラーがなくなったと思ったら、500エラー。一番会いたくないやつですが、PHPに異常がないとわかっているので、原因は .htaccess にあります。
CPI のソフトライブラリで WordPress をインストールした際、WordPress 関連以外のファイルとして、php.ini と cpi_cms_settings.yml が作られます。
php.ini は、ユーザーがドキュメントルートで設定を変えられるように作られたものなので、特に変更する必要がなければ使いません。
cpi_cms_settings.yml は CPI がソフトライブラリのインストール状況でも管理しているのだろうと判断したので、WordPress のインストールディレクトリに置いたままにしておきました。
原因があるとしたらこの2つの関連だろうと当たりをつけ、.htaccess の
suPHP_ConfigPath /home/ユーザID/html/wordpress/
を削除(コメントアウトでもOK)したことで、500エラーから解放されました!ただ、php.ini が必要になった場合は、php.ini の置き場にパスを変更して使うようにしないとですね。
しかしデータベースにつながらない!
表示できるようになったと喜んだのもつかの間、管理画面にログインしようと思ったら、「データベース接続エラー」の非常な文字。もう白い画面見飽きたよ・・・
WordPress の管理画面、/wp-admin/ にアクセスしたところ、データベース選択不可と言われます。ユーザー名とパスワードには問題なく、データベースを選択できないそうです。
本当に存在しているよ!
使用できる権限もあるよ!!
データベースの接頭辞に問題ないよ!!!
グーグル先生に聞いても、ケアレスミスの答えしか見つからないので phpMyAdmin でデータベースの登録内容を色々と探してみたのですが、これといった設定はなく。
半ばあきらめかけていたところに、「127.0.0.1:3307」という表示。
ポート・・・あなたなの・・・?
PHPの最新バージョンとして(テスト環境の時から)5.6を使っていたので気にしていなかったのですが、wp-config.php のホスト名を「127.0.0.1」(デフォルトのホスト)から「127.0.0.1:3307(ポート番号を追加)」に変えたところ解決!!
わかってしまえばスムーズに行くことばかりなのですが、次回と備忘録も兼ねてのメモでした。テンションがおかしいのは自分の不甲斐なさが笑うしかないのと、久しぶりにブログを書いたせいです。
たまには書かないとですね。