記事全文は結構長いので、急いでいる方は頭の必要な行だけお読みください。 それと下記の方法を試す前に必ずサイト全体とサーバにあるindex.phpなどのバックアップは取りましょう!! バックアップは超大事ですよ!
さくらのレンタルサーバにWordPressをインストールする時に「初期ドメイン公開フォルダ直下にインストールすることは出来ません」と出る場合があります。 当時初めてWordPressをインストールした私はURLをドメイン直下にしたいと思いつつ、対処法を調べても間違えずに行う自信が無かったので、軽い気持ちで「○○○○○○.com/blog」にWordPressをインストールしました。 でもこれが大失敗! これから独自ドメインでWordPressを始める人は、何が何でもドメイン直下にインストールする方法を調べてインストールしちゃってください。
ドメイン直下が良い理由は私の場合は一つのみ、「【グーグルアドセンス】Google Adsense」に登録する場合に独自ドメイン直下でないと面倒なのです。
例えば/wpや/blogのディレクトリでサイト運営を始め、将来アドセンス申し込みをしようとした時に「パス形式では申し込みできない」と言う事態になります。(将来変わるかもしれませんが)
本題です。 WordPressをディレクトリにインストールしてしまい、のちに公開URLを変更する時は
https://knowledge.sakura.ad.jp/25847/
などを見て変更する方が多いと思います。 すんなり成功する人はするのでしょうが、私は上手く行きませんでした。
原因はサーバ内にあるwpやblog等のディレクトリ内のindex.php記述。
どのサイトの記事を見てもディレクトリ内のindex.phpは
require __DIR__ . '/wp-blog-header.php';
から
require __DIR__ . ‘/wp/wp-blog-header.php'; もしくは require __DIR__ . '/blog/wp-blog-header.php';
に修正してそれをドメイン直下に移動もしくはコピーでOK、とあるのですが私の場合はドメイン直下のindex.phpは「require __DIR__ . ‘/wp/wp-blog-header.php'; もしくは require __DIR__ . '/blog/wp-blog-header.php’;」に修正したまま、wpやblog等のディレクトリ内に残っているindex.phpを元の「require __DIR__ . '/wp-blog-header.php’;」に戻すことでサイトの表示が直りました。
URL変更後の、リダイレクト関連記事は何通りもあるので調べてください。 私も弄っていますがおそらく.htaccessのリダイレクト記述はエラーに関係無いので、躓いた・詰まった方はリダイレクト関連は元に戻して(戻さなくても大丈夫かとは思います)から、上のindex.phpを修正してみてください。
ネットに同じような情報が無かったので、どうしても直せない方は参考にどうぞ。 私がコードに詳しく無いので情報が間違っていた場合はご指摘ください。
以下にもう少し詳細な経緯などを記載しますので、参考にしたい方はご覧ください。
もうずっと前から自社HPくらいは自分で全てデザインしたいと思い、DreamweaverやMuse。古くはPageMill、GoLive等を独学で勉強しながら制作していました。 ただ昔は本やネットに情報はあるのですが、少しでも本などに載っていないエラーに嵌ると抜け出せず、諦める→懲りずに独学で→諦める。を繰り返していました。
便利な世の中になりました。 WordPressの登場です。 WordPressに関してはネットに情報が無数にあり、有料・無料・動画を含めて探せば初心者の私でも何とかなるくらいにTipsが豊富な素晴らしいソフトウェアです。
話を戻します。
コスパで選び、さくらのレンタルサーバ使っています。 WordPress初心者でさくらを選ぶ方は一定数いると思います。
当然知識が少ないのでドメイン直下にインストールする方法を見ても自信がありませんでした。 ドメイン直下にするメリットもURLがスッキリする以外、当時は利点が無いように感じたのと、後で直せるのは知っていたので趣味ブログだったせいもあり気軽に/blogにインストールしてしまいました。
ある程度記事が出来たのでどうせなら広告を付けたいなと。
アドセンス広告ならサイトに自動に広告が出るだけなので、気軽に出来るかな?と思って挑戦してみるとグーグルさんが言うんですよ。「サブディレクトリ(パス形式、/wpとか/blogとかがURLの最後に付いているヤツ)では申請出来ない」よと。。
他にドメイン直下のサイトを持っていればそれを審査に通してサブディレクトリのサイトも審査を通す事ができるらしいのですが、どうせならドメイン直下に直そうと思い調べ始めました。
初心者の私が調べると
1、index.phpの記述を弄る方法
2、Redirectionなどのプラグインを使いリダイレクトさせる方法
があると知り、ハードルの低そうな2のプラグインで挑戦。(1と2が同列と思っている時点で間違ってますね。)
今でも理解が正しいのか不明ですが、リダイレクトする先のURLが無いのにプラグインでリダイレクトさせようとしたのが最初の失敗なのか何なのか、セットアップの途中の「REST API」がグッドにならないのに無理やり進めて設定をしたらサイトが真っ白に。。。。
サイトのバックアップ(さくらの場合はSnapUpのステージング)から前のデータに戻しても直らない。。 超不安でしたがWordPress自体を再インストールしたら元に戻り事なきを得ました。
この時点で一度諦めましたが、再度一ヶ月後に挑戦。
1のindex.phpの記述を弄る方法を試しました。 するとすんなり成功!https://○○○○○○.comで検索して表示されるようになりました。
すると今度はhttps://○○○○○○.com/blogで検索しても表示されないし、下層の記事も表示されない、と言う事態に。
下層記事のパーマリンクはデフォルト(基本)に戻せば表示されるので、一時的にそれで退避。恐る恐る再度Redirectionをインストール、エラーは出ずセットアップ完了。でもリダイレクトせず。。。
今度は.htaccessの記述を弄ってみました。画像表示が?になるけどリダイレクトは成功!でも管理画面に入れない。 何をどうやっても入れない。。。
ここで一度諦めました。 トップページはリダイレクトされるけど画像が?のままで数日。管理画面にログインしようとすると「HTTP ERROR 500」とか出る始末。グーグルさんからは「サイトの表示が変だ」とか「色々エラーがある」だとか言われ出して数日後、ふとサイト自体のエラーを調べる方法を発見。
https://www.gou-blog.com/2017/06/21/http500error/
さくらのサーバーにアクセスし、PHP設定の編集→php.ini設定ファイルの編集に「error_reporting 8191」と入力、するとリロード後に
Warning: require(/home/nipponwanpo/www/blog/blog/wp-blog-header.php): failed to open stream: No such file or directory in /home/○○○○○○○○○○○/www/blog/index.php on line 17
Fatal error: require(): Failed opening required '/home/nipponwanpo/www/blog/blog/wp-blog-header.php' (include_path='.:/usr/local/php/7.4/lib/php') in /home/○○○○○○○○○○○/www/blog/index.php on line 17
と表示されました。
調べてみるとこの意味は
/blog内のindex.phpの大体17行目辺りがおかしいよ、/blog/blog/って命令が変みたいよ!
と言っているらしいです。 違っていたらすみません。
ん? という事はWordPressがインストールしてあるフォルダ内のindex.phpだけ直すって事? でもどのサイトにもディレクトリ内とドメイン直下にある2つのindex.phpの記述を別々に変えて良いなんて書いてないよ? でもエラーログはそんな意味っぽい。
でも他にやりようが無いので恐る恐るディレクトリ(/blog)内のindex.phpを
require __DIR__ . '/blog/wp-blog-header.php';
から
require __DIR__ . '/wp-blog-header.php';
に修正し、ドメイン直下のindex.phpは
require __DIR__ . '/blog/wp-blog-header.php’;
のままで再度挑戦。すると直りました!!!!!
トップページの「○○○○○○.com/wp」から「○○○○○○.com」へのリダイレクトは自動でしない(覚えてませんがトップページのみリダイレクトしていたかも?)のでRedirectionなどのプラグインで下層ページまで含めて設定し直したのと、一部の画像リンクが切れたのでPhoenix Media Renameで再設定。全てバッチリ行きました。
Redirectionのリダイレクトが上手く行っているので.htaccessの記述は元のままでも良いかと思うのですが、私は途中で追加した
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/blog https://nipponwanpo.com [R=301,L]
</IfModule>
の記述は残しています。たぶん要らないよなコレ。そのうち変な挙動しそうな気が。。
他に一部直しています。 ここの記述はコレで正しいと思います。
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
この記述は最初
(新)RewriteBase / → (旧)RewriteBase /blog/
(新)RewriteRule . /index.php [L] → (旧)RewriteRule . /blog/index.php [L]
だったのですが上記に直しています。
仕事の合間に調べて直してを繰り返したのですが、おそよ直すのに一週間。 直した後も途中色々いじっていたパーマリンクのせいで、サーチコンソールに余計な検索URLが出てきたのを直すなど結構散々な目に遭いました。
以上です。 自分の忘備録としての記事ですが、誰かの解決の糸口に少しでもなれば幸いです。