私のサイトはサーバー上にあります
http://www.myserver.uk.com
このために私は2つのドメインがあります。
http://one.com
そして
http://two.com
PHP現在のドメインで取得したいのですが、$_SERVER['HTTP_Host']
を使用すると、これが表示されます
myserver.uk.com
の代わりに:
one.com or two.com
サーバー名ではなくドメインを取得する方法PHPバージョン5.2があります
最善の使い方は
echo $_SERVER['HTTP_Host'];
そしてこんな風に使える
if(strpos( $_SERVER['HTTP_Host'], 'banana.com') !== false){
echo "Yes this is indeed the banana.com domain";
}
以下のこのコードは、キーワードを強調表示した構造化HTML出力で$ _SERVER内のすべての変数を表示するのに適した方法です。実行後すぐに停止します。私は時々自分自身を使うべきものを忘れるので - 私はこれが気の利いた方法であると思う。
<?php
// change banana.com to the domain you were looking for..
$wordToHighlight= "banana.com";
$serverVarHighlighted = str_replace( $wordToHighlight, '<span style=\'background-color:#883399; color: #FFFFFF;\'>'. $wordToHighlight .'</span>', $_SERVER );
echo "<pre>";
print_r( $serverVarHighlighted );
echo "</pre>";
exit();
?>
$_SERVER['HTTP_Host']
を使用すると、私(サブドメイン)maindomain.extensionが取得されます。私にとって最も簡単な解決策のように思えます。
編集:あなたが実際にiFrameを通して「リダイレクト」しているなら、あなたはドメインを示すgetパラメータを追加することができます。
<iframe src="myserver.uk.com?domain=one.com"/>
そして、アプリケーション全体でこのデータを保持するセッション変数を設定できます。
当面のセキュリティ問題についての言及なしに、この回答が何十万もの見解をどのように受け取ったのか私は知りません。
$_SERVER['HTTP_Host']
これはリクエストヘッダーからドメインを取得するもので、これは ハッカーによる操作に対してオープン であり、キャッシュポイズニングを引き起こす可能性があります。
$_SERVER['SERVER_NAME']
デフォルトのApache設定では secanonicalname がオフになっています。これは、$_SERVER['SERVER_NAME']
にとにかく(プラスポートを)使用した場合と同じヘッダーを$_SERVER['HTTP_Host']
に追加するためのものです。 これはいくつかの悪質な例です 。 usecanonicalnameがオンになっていると、より安全になりますが、そのタイプの設定がほとんどの環境で機能するかどうかはわかりません。
警告:
唯一の保証された安全な方法はあなたがアクセスできるどこかにドメイン名を保存することです。
多くのフレームワークがすでにあなたのためにこれをやるようにしているので、あなたの特定のフレームワークのためのドキュメンテーションを調べてください。フレームワークを使用していない場合は、次の方法のいずれかが機能します。
+ -------------------------------------------- - + ------------------------ + |現在のドメインを保存する安全な方法デフォルト/推奨する場所| + --------------------------------------- ------- + ------------------------ + |設定ファイル| Joomla、Drupal/Symfony | |データベース| WordPress | |環境変数Laravel | |サービスレジストリKubernetes DNS | + ----------------------------------------- ----- + ------------------------ +
WordPressを使用している場合は、次のように安全にドメインを取得できます。
$urlparts = parse_url(home_url());
$domain = $urlparts['Host'];
(ただし、WordPressでURLを作成している場合は、 home_url または site_url 、あるいは その他のURL関数 を使用してください。)
$_SERVER['SERVER_NAME']
を試してください。ヒント:関数phpinfo()
を呼び出すPHPファイルを作成し、PHP変数を参照してください。私たちがそこで考えたことがないたくさんの有用な変数があります。
回答が遅れていますが、ここでは
$currentDomain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']);
www
を付けずに、きれいなドメイン名を指定できます。
私はこれが完全には主題ではないかもしれないことを知っている、しかし私の経験では、私は変数に現在のURLのWWW-nessを格納することが役に立つと思う。
編集:さらに、これがどうなっているのかを見るために、下の私のコメントを見てください。
これは、Ajax呼び出しを "www"を使って、または次を付けずにディスパッチするかどうかを決めるときに重要です。
$.ajax("url" : "www.site.com/script.php", ...
$.ajax("url" : "site.com/script.php", ...
Ajax呼び出しをディスパッチするとき、ドメイン名はブラウザのアドレスバーのそれと一致しなければなりません、そうでなければ、コンソールにncaught SecurityErrorがあるでしょう。
そこで私はこの問題に取り組むためにこの解決策を思いついた。
<?php
substr($_SERVER['SERVER_NAME'], 0, 3) == "www" ? $WWW = true : $WWW = false;
if ($WWW) {
/* We have www.example.com */
} else {
/* We have example.com */
}
?>
次に、$ WWWがtrueかfalseかに基づいて、適切なAjax呼び出しを実行します。
私はこれが些細に聞こえるかもしれないことを知っています、しかしこれはつまずくことが容易であるそのような一般的な問題です。
すみません遅い答えのために誰もがparse_url
関数を使っていますが時々ユーザーは異なるフォーマットで引数を渡すかもしれません
私はこれをチェックして機能を作成したことを修正するために
function fixDomainName($url='')
{
$strToLower = strtolower(trim($url));
$httpPregReplace = preg_replace('/^http:\/\//i', '', $strToLower);
$httpsPregReplace = preg_replace('/^https:\/\//i', '', $httpPregReplace);
$wwwPregReplace = preg_replace('/^www\./i', '', $httpsPregReplace);
$explodeToArray = explode('/', $wwwPregReplace);
$finalDomainName = trim($explodeToArray[0]);
return $finalDomainName;
}
uRLを渡してドメインを取得するだけです。例えば
echo fixDomainName('https://stackoverflow.com');
結果が返されます
stackoverflow.com
そしてある状況では
echo fixDomainName('stackoverflow.com/questions/id/slug');
そしてそれはまたstackoverflow.com
を返すでしょう
それが役に立てば幸い
$_SERVER['HTTP_Host']
//ドメインを取得する
$protocol=strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https';
$domainLink=$protocol.'://'.$_SERVER['HTTP_Host'];
//プロトコル付きドメイン
$url=$protocol.'://'.$_SERVER['HTTP_Host'].'?'.$_SERVER['QUERY_STRING'];
// protocol、domain、queryString total ** $ _ SERVER ['SERVER_NAME']はマルチドメインホスティングに対して信頼できないためです!