今まで使っていたxdomainのレンタルサーバーはPHPバージョンが7.1までしか利用できず、WordPressのバージョンアップもできなくなっていたのでしばらくほったらかしになっていたが、
シンフリーサーバーという代替サービス(無料サーバー)がいつの間にか誕生してたので、サーバー移転してみることになった。
その時に得た知識を備忘録として記録する。
目次
WordPressの個数はデータベースの個数と同じ
通常、1つのWordPressサイトは1つのMySQLデータベースを使用する。
したがって、データベースの個数が制限されている場合、それに応じてインストールできるWordPressサイトの数も制限されるのが一般的だ。
つまり、5つのMySQLデータベースがあれば、通常は5つのWordPressサイトを独立してインストールできる。
私の場合、旧サーバーではデータベース(MySQL)が10個まで利用できたが、新サーバーでは5個までしか利用できなかったので旧サーバーで運用していた7個のWEBサイトは2個を諦めて5個しか移行できないことになる。
そこで、データベース1個に対して複数のWEBサイトを運用できないかを調べたところ、不可能ではなかった。
例えば、テーブルプレフィックスを変えることで1つのデータベースに複数のWordPressインストールしたり、1つのWordPressで複数のサイト(サブドメインやサブディレクトリ形式)を管理する、という方法がありそうだ。
ただやはり、基本は1データベースに1WordPressであるので、ダミーで立ち上げた2サイトはこの機会に整理して、移行は5つのサイトにすることとした。
古いバージョンのWordPressは新しいPHPバージョンでは動かない
旧サーバーではPHPバージョンが7.1までしか利用できず、WordPress6.2からバージョンアップができなかった。
この状態でレンタルサーバーが用意してくれているサイト上のWordPressの簡易移行ツールを使って新サーバーに移行を行いWEBサイトを開くと、以下のエラーがでて開けなくなってしまった。
Fatal error:
Array and string offset access syntax with curly braces is no longer supported in
~~~.com/wp-includes/script-loader.php on line 757
これは、PHPバージョン相違による不具合を示しているとchatGPTが教えてくれた。
そういえば新サーバのPHPバージョンは8.1だった。WordPressのバージョンは移行したので6.2のままだ。
原因がわかったので、新サーバーのPHPバージョンを7.2までダウングレードしてみると、WEBページはあっさりと開くようになった!
この状態からWordPressをバージョンアップし、その後PHPバージョンを8.1まで戻すと、正常に最新状態になった。
このようにエラー内容がPHPバージョンに起因する場合は、一旦PHPバージョンを落とすことによりサイトを開けるようにして、
原因となる部分を取り除いてからPHPバージョンを戻すとよい。
ちなみに他にも、特定の投稿だけエラーになるページがあったり、テーマを切り替えた時にいきなり全ページ表示不可になってしまったりしたが、これらも特定のプラグインやテーマとPHPバージョンが合わなかった事が原因だった。
よって、プラグインやテーマは使うものだけを残し、常に最新の状態にしておく事をお勧めする。
ネームサーバーは独自ドメインを契約しているサイトで設定する
独自ドメインで公開しているWEBサイトをサーバー移転したら、新サーバーの方のWEBサイトにアクセスされるようにするためにはネームサーバーを切り替えなければならない。
ここで、まず全体像はどうなっているのかをおさらいしたい。
まず、ネームサーバーとはドメイン名とIPアドレスの変換辞書を提供するサーバーの事だ。
ネームサーバーを切り替えるという事は、ドメイン名が指し示すIPアドレスを旧サーバーのものから新サーバーのものへと上書きする事だ。
私の独自ドメインはxdomainで契約・取得したものだ。いままでこれをxserverの無料WordPressで運用していた。xdomainとxserverは同じサイトのサービスだ。
この場合、xdomainのネームサーバーの「ドメイン適用先」を自サイトに設定しておくと、xserverのWEBサイトにつながるようになる。
今回は、サーバー移行によりxserverからシンフリーサーバーへWEBサイト移行したので、xdomainのネームサーバーの「ドメイン適用先」他サイトとして、シンフリーサーバーのネームサーバーを指定する。
つまり、独自ドメインを契約しているサイト上で、ネームサーバー設定により独自ドメインが適用されているWEBサイトがどこのサーバーにあるのかを指定する事ができる、という事だ。
こうしておくと、独自ドメインによってアクセスされてきたリクエストは、シンフリーサーバーのネームサーバーにたどり着き、新サーバー上のWEBサイトへ到着する。
ネームサーバーのデータ反映まで
独自ドメインによる移行先のWEBサイトへのアクセスが開始するには、独自ドメインの契約サイト上でネームサーバーを新サーバーのものに設定した事が世界中のネームサーバーに順次波及するのを待たねばならない。
具体的には実際に自分のパソコンのWEBブラウザからのアクセスの結果に反映するには、契約しているインターネットプロバイダのネームサーバーに情報が反映されなければならない。
パソコンのインターネット接続設定の中で、Google Public DNS(プライマリ8.8.8.8 セカンダリ8.8.4.4)などを手動設定する、という方法もある。
しかし、インターネット接続の際にルータなどでDHCP自動(ローカルLAN側のIPアドレス自動払い出し)などになっていることで、自動的にプロバイダのDNSサーバーが使われるようになっている事が多いので、ここはおとなしく情報が波及するまで待った方がよい。
私の場合、最終的に新サーバーへつながるようになるまでに半日かかった。
.htaccessによるリダイレクト設定
独自ドメインのWEBサイトをサーバー移転する際、URLが同じであればネームサーバーが反映後は新サーバーのWEBサイトにアクセスが始まる。
移転後のURLのドメイン名が違う場合は、ネームサーバーは関係なく、新サーバーのWEBサイトは初めからアクセス可能だ。そして当然ながら旧サーバーのWEBサイトもアクセス可能なままの状態が継続していることになる。
要するに、同じWEBサイトが2つのURLで公開されている状態だ。
これではGoogleに重複サイトとして認識されてしまい、検索されにくくなってしまう。なので旧サイトを閉鎖しなければならない。
だだし、単に閉鎖してしまうと重複問題は解消されるが、今まで見にくてくれていたユーザー目線で見ると、突然のアクセス不可となってしまう。
また、新サーバーのサイトのGoogleでの評価も再スタートとなってしまう。
ここで旧サーバーに、新サーバーへの転送設定、いわゆるリダイレクト設定をしておくと、ユーザーも今まで通りアクセスが可能となり、Googleの評価も引き継がれる。
リダイレクト設定は、転送元のサーバーのサイト上の「.htaccess設定」から行う。
設定内容の例は以下のとおりで行った。(ChatGTPに作ってもらった)
(http://pho.wp.xdomain.jpからhttps://koto.fromippo.comにリダイレクトする設定の例)
リダイレクト設定の例
# BEGIN Redirect
RewriteEngine On
RewriteCond %{HTTP_HOST} ^pho\.wp\.xdomain\.jp$ [OR]
RewriteCond %{HTTP_HOST} ^www\.pho\.wp\.xdomain\.jp$
RewriteRule ^(.*)$ https://koto.fromippo.com/$1 [R=301,L]
# END Redirect
「#」はその行の命令をコメントアウト(命令をコメント扱いとして無効化)する記号なので、2行目~4行目の先頭に「♯」を付けるとリダイレクト設定はOFFになる。
ads.txtファイルの設定について
ads.txtファイルとは、Googleのアドセンスを利用している場合に必要となるもので、これが設置されていないとGoogleからadsファイルを設定してくれとメッセージが表示される場合がある。
Googleから指定されたテキストを保存したテキストファイルを「ads」という名称で保存し、WEBサイトのトップレベルのディレクトリに設置するものだが、私が今回利用しているシンフリーサーバーではファイルは既に設置されていて、ファイルの内容をサイト上の設定画面から編集できるようになっていた。
サーバー移行後に旧サーバーへ接続する方法
無事にWEBサイトのサーバー移行が完了した後でも、旧サーバーのWEBサイトの編集や確認が必要な場合がある。
しかし、旧サーバーのWEBサイトにアクセスしようとしても、新サーバーのWEBサイトへつながってしまう。なぜなら、そうなるように設定したからだ。
では、旧サーバーのWEBサイトへアクセスするにはどうすればよいのだろうか。
新旧URLのドメイン名が同じ場合
旧サーバーのURLにアクセスしても新サーバーのWEBサイトにアクセスしてしまうのは、ネームサーバーによりドメイン名が新サーバーのIPアドレスの方に変換されてしまうからだ。
この流れから逃れて旧サーバーにアクセスするには、hostsファイルを利用する。
hostsファイルとは、パソコンに保存された一番身近なDNSサーバーの役割を果たすもので、このファイルの中に「このドメイン名はこのIPアドレスに変換して接続してください」という内容の設定をしておくと、ネームサーバーに影響されることなく任意の接続先へアクセスすることができる。
方法は、まず「Windows」メニューから「メモ帳」を右クリックし、「その他」>「管理者として実行」を選択する。
「ファイル」メニューから「開く」を選択し、「C:\Windows\System32\drivers\etc」の場所を指定し、ファイルの種類を「すべてのファイル(*,*)」を選択すると、「hosts」ファイルが選べるようになるので、選択して「開く」をクリックする。
hostsファイルが開くので、一番下に
「旧サーバーのIPアドレス+半角スペース+アクセスしたいURL(サブドメインがあれば含む)」
を書き込んで保存し、ファイルを閉じる。
以上で、ブラウザでアクセスしたいURLを開くと旧サーバーのWEBサイトにアクセスできるようになっている。
WordPressのログイン画面であれば、ブラウザのアドレス欄に「アクセスしたいURL + /wp-login.php?」を入力してアクセスすると旧サーバーのWordPressのログイン画面が表示されるようになっているはずだ。
新旧URLのドメイン名が異なる場合
そもそも新旧サーバーでドメイン名が異なる場合、ネームサーバーによる旧サーバーから新サーバーへの誘導は対象外なので、前述の「.htaccess設定」にてリダイレクト設定を行っている。この設定の影響で旧サーバーにアクセスできなくなっている。
だから旧サーバーにアクセスするには「.htaccess設定」でのリダイレクト設定を一時的に停止すればよい。
「.htaccess設定」の中で、リダイレクト設定をしている部分の全ての行の先頭に「♯」を書き込めば、コメントアウトされてリダイレクトされなくなる。
以上で、ブラウザでアクセスしたいURLを開くと旧サーバーのWEBサイトにアクセスできるようになっている。
WordPressのログイン画面であれば、ブラウザのアドレス欄に「アクセスしたいURL + /wp-login.php?」を入力してアクセスすると旧サーバーのWordPressのログイン画面が表示されるようになっているはずだ。
ちなみに、今回のケース(新旧URLでドメイン名が異なる場合で「.htaccess設定」によるリダイレクト設定済の場合)では、「hosts」ファイルで強制的に旧サーバーへのアクセスはできないのだろうか。
試しに「hosts」ファイルにて旧サーバーのIPアドレスを指定してアクセスしてみたが、「.htaccess設定」によるリダイレクト設定にはじかれてしまい、新サーバーへつながってしまった。
理由は、「.htaccess設定」によるリダイレクト設定は、ブラウザからのアクセスリクエスト情報に含まれるURL(ブラウザのアドレス欄に入力したURL)を見て、どのURLに切り替えるのかを設定しているものだからだ。
よく考えてみると、「hosts」ファイルに旧サーバーのIPアドレスなど指定しなくても、新旧URLでドメイン名が異なるのだから、そもそも世界中のネームサーバーにより旧サーバーのIPアドレスにつながるようになっているので「hosts」での設定は不要だった。