Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【PHP・url転送】$_SERVER(サーバー変数)のHTTP_HOSTやREQUEST_URIを使って、新しいドメインにリダイレクトさせる方法

更新: 2023/11/15 2630文字

今回は、$_SERVER(サーバー情報および実行時の環境情報が入った、PHPのスーパーグローバル変数)を使って、新しいドメインにリダイレクトさせる方法を見ていきます。 管理人は最近、他に運用しているサイトに新しいドメインを割り当てましたが、そこに転送をかけるときに使ってみました。状況によっては、『.htaccessやプラグインインストールの権限をもらえない』ということもあります。さっそくやり方を確認していきましょう。

権限をもらえないってケースとは?

例えば、新しいurlに転送するときは・・ こんな感じで.haccessファイルに書いてリダイレクトさせたり・・・

WordPressだったら、リダイレクトプラグインを使ったりできるわけです。

しかし管理人が以前遭遇したケースでは、クライアント企業が『会社のセキュリティの規約上、外部にプラグインインストールの権限は渡せないんすよー』と言ってきたことがありました。マジです笑。 そういうわけで、『いろんな方法を押さえておく』のが良いこともあるわけです。今回のは以前は使ってなかった方法です。

以前転送方法はいろいろ書きましたので、以下のリンク(当サイト過去記事)からも見てみてください。

管理人の、新ドメインに転送かけたいサイトの状況は?

今回扱うのは、いつものように実験台になっている管理人のサイト『ss-freemusic』です。こちらも、ドメインが古いままになっていたので、新しいものを割り当てていきます。状況は以下の通り。

旧ドメイン ss-freemusic.sounds-stella.jp
新ドメイン ssf.atelier-ss-agency.com
プロトコル どちらもHTTPS
パーマリンク形式 新・旧で変更なし

ちなみに、この状況とPHPの$_SERVER(サーバー変数)を照らし合わせてみると、以下のようなことがわかります。

  • 新旧ドメイン:$_SERVER['HTTP_HOST']で取得できる
  • プロトコル:$_SERVER['HTTPS']判定できる
  • パーマリンク部分:$_SERVER['REQUEST_URI'](ドメイン以下のパス)で取得できる

このほか、urlパラメータがある場合は$_SERVER['QUERY_STRING']、遷移してきたページ判定するときは$_SERVER['HTTP_REFERER']なども判定に使っていきますが、今回はシンプルにHTTP_HOSTとREQUEST_URIを使っていきます。HTTPSは、ずっとhttps://~の形式で表示していたので、特に判定しません。詳しく知りたい方は、PHPマニュアルもご覧ください。

PHPの$_SERVER(サーバー変数)のHTTP_HOSTやREQUEST_URIを使って転送する方法

コード例と解説(WordPressヘッダー記載)

コードはこんな感じ。まずif文で$_SERVERのHTTP_HOSTが『旧ドメインだった場合』にスクリプト実行するようにします。リダイレクト先は変数に格納。新ドメインと、REQUEST_URI(パーマリンク一切変えなかったからこれができる)をくっつけてリダイレクト先に。

PHPのheader関数,Locationヘッダーを使っても良いですし(変数を展開させるため、二重引用符にしています)、javascriptのlocation、どちらでも動作を確認しました。 (ただし、PHPのheaderは、前に要素や改行などが出力されていると、エラーになるみたいなのでご注意ください。)

動作確認してみよう

では動作確認してみます。以下にSSFのいろんな旧ドメインurlを用意ました。新しいドメイン『ssf.atelier-ss-agency.com』に飛んでいればokです。

■SSFトップページ
https://ss-freemusic.sounds-stella.jp/

■SSFアーカイブ(一覧)
https://ss-freemusic.sounds-stella.jp/archive/

■固定ページ(post_type=page)
https://ss-freemusic.sounds-stella.jp/about

■個別投稿ページ(post_type=post)
https://ss-freemusic.sounds-stella.jp/2058/rd12-for-escape-scene/

あとがき・まとめ

  • 状況によっては、.htaccessやプラグインの権限がない場合がある(ので別方法チェックした)
  • PHPの$_SERVER(サーバー変数)で、ドメインやそれ以下のパスなど、いろいろな情報を取れる
  • header関数や条件分岐と組み合わせて、旧ドメインのとき転送するのにも使える

まとめると、こんなところでしょうか。.haccessやプラグイン転送、meta refreshのほかにも、転送方法が使えるようになりました。状況にあわせて適切なものを選択していきたいところです。


【カテゴリ】- PHP
【タグ】- , , ,

関連記事