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

今回は、$_SERVER(サーバー情報および実行時の環境情報が入った、PHPのスーパーグローバル変数)を使って、新しいドメインにリダイレクトさせる方法を見ていきます。 管理人は最近、他に運用しているサイトに新しいドメインを割り当てましたが、そこに転送をかけるときに使ってみました。状況によっては、『.htaccessやプラグインインストールの権限をもらえない』ということもあります。さっそくやり方を確認していきましょう。
目次
権限をもらえないってケースとは?
例えば、新しいurlに転送するときは・・
こんな感じで.haccessファイルに書いてリダイレクトさせたり・・・
WordPressだったら、リダイレクトプラグインを使ったりできるわけです。
しかし管理人が以前遭遇したケースでは、クライアント企業が『会社のセキュリティの規約上、外部にプラグインインストールの権限は渡せないんすよー』と言ってきたことがありました。マジです笑。 そういうわけで、『いろんな方法を押さえておく』のが良いこともあるわけです。今回のは以前は使ってなかった方法です。
以前転送方法はいろいろ書きましたので、以下のリンク(当サイト過去記事)からも見てみてください。
【当サイトタグまとめ】- URLの転送
https://division-web.atelier-ss-agency.com/tag/url%E3%81%AE%E8%BB%A2%E9%80%81/
管理人の、新ドメインに転送かけたいサイトの状況は?
今回扱うのは、いつものように実験台になっている管理人のサイト『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マニュアルもご覧ください。
$_SERVER(PHPマニュアル)
https://www.php.net/manual/ja/reserved.variables.server.php
PHPの$_SERVER(サーバー変数)のHTTP_HOSTやREQUEST_URIを使って転送する方法
コード例と解説(WordPressヘッダー記載)
コードはこんな感じ。まずif文で$_SERVERのHTTP_HOSTが『旧ドメインだった場合』にスクリプト実行するようにします。リダイレクト先は変数に格納。新ドメインと、REQUEST_URI(パーマリンク一切変えなかったからこれができる)をくっつけてリダイレクト先に。
PHPのheader関数,Locationヘッダーを使っても良いですし(変数を展開させるため、二重引用符にしています)、javascriptのlocation、どちらでも動作を確認しました。 (ただし、PHPのheaderは、前に要素や改行などが出力されていると、エラーになるみたいなのでご注意ください。)
header(PHPマニュアル)
https://www.php.net/manual/ja/function.header.php
動作確認してみよう
では動作確認してみます。以下に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
【タグ】- $_SERVER(PHP), header(PHP), PHP, URLの転送