サイト URL の変更

WordPress のシングルインストールでは、「設定 → 一般設定」画面に「WordPress アドレス (URL)」と「サイトアドレス (URL)」という2つの欄があります。これらは「ホーム」および「サイト URL」設定と呼ばれることもあります。両方とも、WordPress がサイトの場所を制御するために重要な設定です。管理画面やフロントエンドの URL 表示をコントロールしたり、WordPress のコード内のあちこちで使われたりしています。

  • 「WordPress アドレス (URL)」設定は、WordPress のコアファイルを配置する場所のアドレスです。
  • 「サイトアドレス (URL)」設定は、WordPress サイトに読者がアクセスするために使うアドレスです。

: 両方の設定には http:// の部分を含め、最後はスラッシュ(”/”)をつけないようにしてください。

時折、これらの設定を変更または修正する必要がある場合もあります。よくあるのは、片方または両方の値を変更してサイトが正しく動作しなくなった時などです。これにより、ユーザーが問題を修正する方法を簡単に発見することができないままになることがあります。このページでは、この設定を管理画面以外から直接変更する方法を紹介します。

WordPress を引っ越す際のための追加情報も含まれていますが、壊れた状態のサイトを正しく直したいだけの場合は無視してください。

注: 以下の手順はシングルインストールの WordPress 向けのものです。WordPress マルチサイトをお使いの場合は、データベースを手動で編集する必要があります。

サイト URL の変更

サイト URL を手動で変更するには、簡単な方法が4つあります。どれもほとんど同じような結果が得られるでしょう。

wp-config.php の編集

wp-config.php ファイル内で、サイト URL を手動設定できます。

以下の2行の “example.com” をサイトの正しいアドレスに置き換え、wp-config.php ファイルに追加してください。

define( 'WP_HOME', 'http://example.com' );
define( 'WP_SITEURL', 'http://example.com' );

これは最適な方法とは言えないかもしれません。サイトの値を決め打ちしているだけです。この方法を使うと、サイトの一般設定ページで値を変更することはできなくなります。

functions.php の編集

これらの値を間違って変更したとしても、サイトへの FTP アクセスができる場合は以下の方法でサイトを元の状態に戻すことができます。

  1. サイトに FTP 接続し、現在有効化されているテーマの functions.php をコピーする。これをテキストエディターで編集し、サイトへ再アップロードすることになります。
  2. 最初の “<?php” 行のすぐ後に以下の2行を追加する。
update_option( 'siteurl', 'http://example.com' );
update_option( 'home', 'http://example.com' );

もちろん、example.com ではなく自分の URL を使ってください。

  1. ファイルをサイトの元あった位置にアップロードする。
  2. ログインまたは管理画面を何度か読み込み直す。サイトが元の状態になっているはずです。

重要functions.php ファイルに追加した行をそのままにしないこと。サイトが元に戻ったらすぐに該当行を削除してください。

注: テーマフォルダ内に functions.php ファイルがない場合は、”functions.php” という新規テキストファイルを作成します。これをテキストエディターで開き、以下の内容を追加してください。example.com は自分のサイトの URL に変更します。

<?php
update_option( 'siteurl', 'http://example.com' );
update_option( 'home', 'http://example.com' );

現在有効化されているテーマのディレクトリにアップロードし、上記のステップ4を行います。その後ファイルを削除してください。

ここでは、LAN を利用した WordPress サイトを外部からアクセスできるサイトに変換したり、LAN 内から WordPress サイトを編集できるようにするための手順を詳しく説明します。

重要な鍵となるのは、ルーター/ファイアウォールの変更と、最後に変更を行った後の「10分以上待つ」という2つです。

ssh を使ってサーバにログインします (nano はサーバにプリインストールされているテキストエディターです)。

$ nano /var/www/books/wp-content/themes/twentyeleven/functions.php

<?php の直後に以下の行を追加します。

update_option( 'siteurl', 'http://your.site.url:port/yourblog');
update_option( 'home', 'http://your.site.url:port/yourblog');

外部サイトの URL を使用してブラウザーを更新してください。

http://your.site.url:port/yourblog

$ nano /var/www/books/wp-content/themes/twentyeleven/functions.php

追加した行を削除 (またはコメントアウト) してください。

ルーターにアクセスします。これらの手順は pfSense 向けのものですが、他のルーターにも同様の設定があるはずです。

firewall/nat テーブルに次のような行を追加します。

wan/tcp/port/LAN.server.IP/80

firewall/rules テーブルに次のような行を追加します。

tcp/*/port/LAN.server.IP/port/*

System/advanced/network address translation/Disable NAT Reflection のボックスのチェックを外します。

"Disables the automatic creation of NAT redirect rules for access to your public IP addresses from within your internal networks. Note: Reflection only works on port forward type items and does not work for large ranges > 500 ports." 

その後、10分後に戻って、LAN ブラウザーから外部 URL http://your.site.url:port/yourblog が正しくページを表示するかどうかを確認してください。

リロケートメソッド

WordPress はサイトを別のサーバーに移す時にサイトをすぐに動作させることに対応するため、自動リロケートメソッドに対応しています。

コードの仕組み

wp-config.php ファイルで RELOCATE が定義されている場合 (次の章を参照)、wp-login.php の以下のコードが実行されます。

if ( defined( 'RELOCATE' ) AND RELOCATE ) {    
  // Move flag is set
  if ( isset( $_SERVER['PATH_INFO'] ) AND ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) ) 
        $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], "", $_SERVER['PHP_SELF'] );
    $url = dirname( set_url_scheme( 'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ) );
    if ( $url != get_option( 'siteurl' ) )
        update_option( 'siteurl', $url );
}

ステップ

  1. wp-config.php を編集するために開く。
  2. “define” 宣言の後 (「編集が必要なのはここまでです !」という行の直前) に、新しい行を追加し define('RELOCATE',true); と入力する。
  3. wp-config.php ファイルを保存する。
  4. ブラウザーを開き、新サーバーの wp-login.php へ移動する。例えば、新しいサイトが http://example.org の場合は http://example.org/wp-login.php とブラウザのアドレスバーに入力する。
  5. 通常と同じようにログインする。
  6. ブラウザーのアドレスバーを見て、正しいサーバーにログインしているかどうか確認する。正しい場合は管理画面で「設定 > 一般設定」へ移動し、アドレス設定が両方とも正しいかどうか確認する。変更を保存するのを忘れずに。
  7. すべて正しく修正されたら、wp-config.php を編集してステップ2で追加した内容を削除する。再度リロケートメソッドを使う予定がある場合は、行をコメントアウト (行頭に // と書く) するか truefalse に変更してもよい。

注: RELOCATE が true に設定されている場合、ログイン画面にアクセスした際のパスを使ってサイト URL が更新されます。これで新しい URL で管理画面を使うことができるようになりますが、それ以外の設定を変更するわけではありません。他の設定は手動で変更する必要があります。

重要: RELOCATE 定数を wp-config.php ファイル内に残しておくのはセキュリティ上問題があります。これを行うと、攻撃者が一部の設定内におけるサイトの URL を好きなものに変更することができるからです。作業後は必ず、RELOCATE の行を wp-config.php から削除しましょう。

データベースで URL を直接編集する

ホスティングサービス上の phpMyAdmin にアクセスできる場合は、データベース内の値を直接変更してサイトを元に戻すとよいでしょう。

  1. データベースのバックアップを行い、サイト外にコピーを保存する。
  2. phpMyAdmin にログインする。
  3. 自分のデータベースへのリンクをクリックする。
  4. データベースの一覧が表示される。ここから WordPress のデータベースを選択する。
  5. データベース内のテーブル一覧が表示される。
  6. この一覧で wp_options を探す。注: テーブル接頭辞 wp_ をインストール時に変更した場合は名称が異なるかもしれません。
  7. 表示」アイコンをクリックする。
  8. wp_options テーブルのフィールド一覧が表示される。
  9. option_name フィールドのカラムで、siteurl を探す。: wp_options 内には複数のページがあるので、ページ送りを使って探す。
  10. 通常は行の一番左にある編集アイコン(エンピツ)をクリック。
  11. option_value の入力欄で、新しい URL を入力する。
  12. 間違えていないか確認し、「実行する」をクリックして保存。
  13. wp_options テーブルに戻るので、今度は home フィールドを探して編集アイコンをクリック。
  14. option_value の入力欄で、新しい URL を入力して保存する。

サイトの引越し

サイトをある URL から別の URL に移動する際、新しいサイトの URL 情報が適切に認識されるよう手動でデータベース内のデータを修正する必要があることもあります。この作業を補助するツールはたくさんあり、通常は手動の修正の代わりにそれらを使うべきです。

以下は、情報としてのみ提供しています。このデータは完全ではなかったり間違っていたりする可能性があります。

WordPress をあるシステムから別のシステムに移動しようとしている場合は、まず WordPress の引越しのページを呼んでください。

テーブル接頭辞の変更

多くの WordPress 管理者がしているように、あなたも色々な wp-config.php ハックを使いひとつのデータベースで複数のインストールを運営しているかもしれません。これらのハックの多くには動的にテーブル接頭辞を設定するような変更が含まれており、テーブル接頭辞を変更する場合には prefix_ ユーザーメタテーブル内の項目を必ず更新する必要があります。

上記のセクションと同じく、SQL の変更は永久的なものであり、まずデータベースをバックアップすべきであることを忘れないで下さい。

サイトのテーブル接頭辞を変更する場合、ユーザーメタテーブル内のテーブル接頭辞も変更するようにしてください。こうすることで、新しいサイトが古いサイトでの権限を正しく認識してくれるでしょう。

UPDATE `newprefix_usermeta` SET `meta_key` = REPLACE( `meta_key` , 'oldprefix_', 'newprefix_' );

テンプレートファイルの編集

WordPress テーマ内で、各テンプレートファイルを開いて以前のサイト URL を探して新しいものと置換しましょう。sidebar.php や footer.php などに手動で入力したリンクを探してみてください。

WordPress は bloginfo() というテンプレートタグを使い、管理画面 > 設定 > 一般設定で入力した情報を元に自動的にサイトアドレスを生成します。テンプレートファイル内のタグは変更されません。

設定ファイルの編集

データベースが移動したり、何か変更があったりした場合は WordPress の設定を更新する必要があります。

  1. 設定ファイルを更新する必要があるのは以下の場合のみです。
    1. データベースが他のサーバーに引っ越され、localhost で運用されていない
    2. データベース名を変更した
    3. データベースのユーザー名を変更した
  2. wp-config.php ファイルのバックアップコピーを作成する。
  3. テキストエディターで wp-config.php ファイルを開く。
  4. データベースホストの項目を探して更新する。
  5. ファイルを保存する。

この時点で、WordPress サイトが正しく動作しているはずです。

プロフィールの確認

  1. 管理画面で、設定 > 一般に移動します。ここで、上記「URL の変更」で行った変更が正しいか確認します。
  2. WordPress アドレス (URL) に新しいアドレスが含まれているか確認する。
  3. サイトアドレス (URL) に新しいアドレスが含まれているか確認する。
  4. もしここで変更を行った場合は変更を保存をクリック。

.htaccess ファイルの編集

管理画面 > 設定 > 一般で情報を変更した後、パーマリンクや何らかの URL リライト、リダイレクトを使っている場合は .htaccess ファイルを更新する必要があります。

  1. .htaccess ファイルのバックアップを作成する。これは推奨ではなく必須の作業です。
  2. .htaccess ファイルをテキストエディターで開く。
  3. 自分で追加したカスタムリライトやリダイレクトを探す。これらを他のテキストファイルにコピーして安全に保っておく。
  4. ファイルを閉じる。
  5. パーマリンク画面の支持に従って .htaccess ファイルのパーマリンクを更新する。
  6. 新しくなった .htaccess ファイルを開き、カスタムリライトやリダイレクトがまだあるかどうか確認する。なかったばあいは、保存しておいたファイルからペーストして .htaccess ファイルに書き写す。
  7. カスタムリライトやリダイレクトに新しいサイトのアドレスを反映させる。
  8. ファイルを保存する。
  9. リダイレクトなどをテストし、きちんと動作しているか確かめる。

もしも間違った場合はバックアップからのデータベースの復元を行い再度試すことができます。

その他気をつけること

サイトを引っ越す際には、他にもアドレスを修正するために変更する必要があるかもしれない点があります。

  1. 画像リンク: 画像リンクは wp_posts テーブルの “post_content” に保存されています。上で紹介したコードと似たようなものを使って、画像リンクを更新できます。
  2. wp_options: 上で言及した “siteurl” と “home” 項目以外にも option_value 内で更新が必要なものがあります。例えば “upload path” や、一部のプラグイン関連項目 (ウィジェット、統計情報、サイトマップなど、インストールしたものによる) などです。
  3. 古い URL を含むウィジェットを修正するには、外観 > ウィジェット画面からの更新が必要な場合もあります。
  4. 残っている項目がないかどうか、データベースの一斉検索を行いましょう。変更したものが何なのか必ずしっかり理解し、誤って置換したものがないかどうか各項目を確認しましょう。
  5. マルチサイトネットワークを運用していたり、複数のサイトを持っている場合は、データベース内の URL インスタンスを置換する必要があります。URL は各サイトのテーブルを含む複数のテーブルに保管されています。置換する場合は最新の注意を払い、変更する前にフィールドが何を意味しているか理解しておきましょう。以下にある「GUID についての重要事項」を読んで変更すべきでないものを知っておいてください。
  6. 注: ‘dashboard_incoming_links‘ 内のデータベースオプションテーブルに旧 URL を見つけた場合、このオプションを削除するか無視してください。これはバージョン3.8以降使われていません。

ブログを新しいドメインに引っ越すには、エクスポートインポート機能を使います。

GUID についての重要事項

上記の作業を行いデータベース内で直接 URL を変更している際、wp_posts テーブルの “guid” カラム内に URL が含まれているのに気付くかもしれません。このフィールドに含まれる内容を変更しないことは非常に重要です。

“GUID” という言葉は “Globally Unique Identifier (グローバル固有識別子)” の略です。これは、「すべての空間と時間において固有であり、 絶対に変更されない」という投稿の識別子を保持するためのフィールドです。GUID フィールドは主に、WordPress のフィードを作成する際に使われます。

フィードリーダーがフィードを読み込む際、GUID フィールドの内容を使って項目が以前に表示されたことがあるかを認識します。やり方は色々ありますが、最も一般的な方法は過去に表示された項目の GUID のリストを保持し、「既読マーク」などをつけておくことです。

したがって、GUID を変更すると多くのフィードリーダーが突然ユーザーの購読画面ですべてのコンテンツを新しいものとして表示してしまい、ユーザーを困らせてしまう可能性があります。

GUID フィールドは「グローバルで (全世界的に)」固有であるために、URL または何らかの URL 的表現が使われるというのが受け入れられている慣習です。このため、もしあなたが example.com ドメインを保有している場合、あなたしか example.com を使っている人はいないため、これはあなたとサイトにとってユニークであると言えます。これが WordPress がパーマリンク、もしくはそのような形式を GUID に使っている理由です。

しかし、GUID は絶対に変更してはなりません。ドメインを変更しても、新しいアドレスに移動したとしても投稿はやはり同じ投稿です。新しい URL のフィードを読み込んだフィードリーダーは過去にユーザーが投稿を読んだかどうか認識する必要があるため、GUID は同じものに保つ必要があります

どんな状況においても、GUID カラムの内容は絶対に変更しないでください。

もしデフォルトアップロードフォダーを他の位置に移動させる必要がある場合は、posts テーブルの post_content カラムでメディア URL を更新する必要があります。例えば、デフォルトのアップロードフォルダーが wp-content/uploads から images へ変更となる場合は以下のとおりです。

UPDATE wp_posts SET post_content = REPLACE(post_content,'www.domain.com/wp-content/uploads','www.domain.com/images');

マルチサイトについて気をつけること

WordPress マルチサイトの移動ページを参照。

wp-cli

wp-cli は非常に便利なシェルツールです。

wp search-replace 'example.dev' 'example.com' --skip-columns=guid

または、このオプションだけ変更したい場合は以下を実行します。

wp option update home 'http://example.com'
wp option update siteurl 'http://example.com'

この記事は役に立ちましたか ? どうすればさらに改善できますか ?