システムを新ドメインのサーバーに移行しても、現ユーザー(旧アプリケーションを利用し続けているユーザー)が旧ドメインからデータを取得しているので旧ドメインも存続させないといけない場合、新サーバーを使うソフトウェアが新サーバーのデータを参照している状態だと、旧サーバーと新サーバーでデータベースの整合性の問題が出てくる場合がございます。
今回の事例では、POST GET値を双方旧サーバーから新サーバーに向け変えて(仲介して)旧サーバーを参照し続けるユーザーも新サーバーのデータを引っ張ってきたり書き込んだりできるようなコードをご紹介したいと思います。
HTACCESSでファイルが存在しない場合のすべてのアクセスを単一ファイルにリダイレクトする
まず旧サーバー(旧ドメイン)へのアクセスである場合かつ、ファイルが存在しない場合は全てのアクセスを単一のPHPファイルに集約させます。
この場合のHTACCESSファイルは下記のようになります。
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /request_redirector.php [L]
新サーバーにPOST、GET値を全てリダイレクト(アクセスの仲介)を行うコードを配置する
上記のHTACCCESSですべてのアクセスをrequest_redirector.phpに集約させましたのでrequest_redirector.phpというPHPプログラムを作り下記のように記載します。
<?php $newdomain = "新サーバーのドメイン"; //例 example.com function redirect_post($url, array $data, array $headers = null) { $params = array( 'http' => array( 'method' => 'POST', 'content' => http_build_query($data) ) ); if (!is_null($headers)) { $params['http']['header'] = ''; foreach ($headers as $k => $v) { $params['http']['header'] .= "$k: $v\n"; } } $params['ssl']['verify_peer']=false; $params['ssl']['verify_peer_name']=false; $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if ($fp) { echo @stream_get_contents($fp); die(); } else { die(); } } function redirect_get($url) { $options['ssl']['verify_peer']=false; $options['ssl']['verify_peer_name']=false; $response = @file_get_contents($url, false, stream_context_create($options)); echo $response; } $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://".$newdomain.$_SERVER[REQUEST_URI]; if($_SERVER["REQUEST_METHOD"] == "POST"){ redirect_post($actual_link, $_POST); }else{ redirect_get($actual_link); } ?>
このPHPファイルは全てのPOST,GET値も含めて別のドメインにパラメータを送信し、結果を取得して旧ドメイン上から送信するコードです。(実際のDBとのやり取りや処理は新サーバーで行われます)
新サーバーにプログラムやDBを移行
最後に旧サーバーのプログラム(システム)とデータベースのデータを新サーバーに移行し、旧サーバーのフォルダのシステムファイルを先ほど作りましたHTACCESSとrequest_redirector.php以外を消してしまえば、そのフォルダに含まれるリクエストが全てrequest_redirector.phpに集約・仲介されて新サーバーにて処理されるようになります。
WordPress ワードプレスやphpのコード作成、カスタマイズはワードプレスドクターにお気軽にご相談・ご依頼ください。