【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のほかにも、転送方法が使えるようになりました。状況にあわせて適切なものを選択していきたいところです。

WordPressサイト制作&リニューアル・機能開発サービス | アトリエSS


【カテゴリ】- PHP・データベースetc, webサイト制作関連
【タグ】- , , ,

関連記事

【WordPressで覚える】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い
【WordPress2019公式テーマ】Twenty Nineteenってどう?→文字デカすぎ&PCも1カラムは難点・ブロックエディタとの親和性はok
【PHPファイル取得でmidiデータ配布サイト】glob関数とWordPress関数で、midiダウンロード&関連記事一覧を作成
【webサイトセキュリティ対策】検索フォームへのSQL判定などがある不正な入力を、WAFで遮断する
WordPress記事一覧ページの『本文からの抜粋』を表示する関数と、その文字数の調整方法をチェックする
【php/pdoクラス】SQLite/phpLiteAdminでデータベース作成&アクセス制限・PDOクラスで記事データ取得してみる
【セキュリティ学習】WordPress関数get_search_queryに細工して、フォームからjavascriptを実行する方法
【PHP・url転送】$_SERVER(サーバー変数)のHTTP_HOSTやREQUEST_URIを使って、新しいドメインにリダイレクトさせる方法
【PHPプログラミング】メモ帳に適当にメモったPV数値をexplodeで配列にし、array_sumで合計値を計算する
【WordPressテーマ改造】カスタマイザープレビューが表示されなくなった件の対応(ファンクション名変更・twenty seventeen)
【WPユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)
【PHP】カウントダウン機能に使える?array_reverseで配列要素を逆に,パラメーター挙動&array_flipとの違い