PHP中文网2016-10-09 11:41:52
うーちょめのインデックスファイルの第二レベルドメイン名の関数を調べるために、PHPの$_SERVER['HTTP_HOST']を使用しました。最初はよくわからなかったので、Baiduで検索したところ、興味深いものを見つけました。投稿。作成するために転送しました。記録します。
php では、通常、$_SERVER['HTTP_HOST'] を使用して、URL 内の Web サイトのドメイン名または IP アドレスを取得します。
PHP マニュアルの説明は次のとおりです。
「HTTP_HOST」
ホストの内容: 現在のリクエストのヘッダー情報。
一般に、この方法で問題が発生することはありません。PFC3 や FLEA などの一部の一般的な PHP フレームワークでは、この事前定義された変数に基づいて。
しかし、最近取り組んでいたプロジェクトで、テストのためにプログラムを顧客に渡すと、プログラムのジャンプが常に失敗することがわかりました。
最終的に理由を調べます。お客様の環境では、$_SERVER['HTTP_HOST'] によって取得される値は常に、LAN 内でプログラムが配置されているサーバーの IP 値です。
その理由は、お客様の会社がサーバーを介してインターネットに接続されており、プログラムが配置されているサーバーがドメイン名を介してマッピングされているためです。つまり、サーバーに「プロキシ」プロセスが存在します。真ん中。 。したがって、このような環境では、$_SERVER['HTTP_HOST'] によって取得される値は常に、LAN 内でプログラムが配置されているサーバーの IP 値になります。
最後に、多くの情報を確認し、symfony フレームワークで代替実装方法を見つけました。
$host = $_SERVER['HTTP_HOST'];
を
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');<と置き換えます。 p>