2

ユーザー用のデータベースにあるサブドメインとカスタムドメイン名を使用するアプリケーションを構築しているため、リクエストが別のドメインから送信された場合、そのカスタムURLが実際にそこにあるか、またはリクエストがいつから送信されたかをデータベースから確認しますサブドメインがあるかどうかを確認します。もしそうなら、私は自分のことをします。

これを私が探している簡単な例と考えてください:

if(is_user_request())
{
    $url = get_url();
    // assuming that get_url() magically decides whether to output ..
    // a custom domain (http://domain.tld)
    // or a subdomain's first part (eg. "this".domain.tld)
}
else
{
    // otherwise it's not a sub domain nor a custom domain,
    // so we're dealing with our own main site.
}

先に進む前に、私には担当者がいないため、ここで「コード」を求めていると仮定します。私はこれを行うための完全に機能する方法を持っています。これは次のとおりです。

// hosts
$hosts = explode('.', $_SERVER['HTTP_HOST']);

// if there is a subdomain and that's under our $sitename
if(!empty($hosts[1]) AND $hosts[1] === Config::get('domain_mid_name'))
{
    $url = $hosts[0];
    $url_custom = false;
}

 // if there is no subdomain, but the domain is our $sitename
 elseif(!empty($hosts[0]) AND $hosts[0] === Config::get('domain_mid_name') AND !empty($hosts[1]) AND $hosts[1] !== Config::get('domain_mid_name'))
    {
    $url = false;
    $url_custom = false;
}

// otherwise it's most likely that the request
// came from a entirely different domain name.
// which means it's probably $custom_site
else
{
    $url = false;
    $url_custom = implode('.', $hosts);
}

if($url)
{
    return $url;
}

if($url_custom)
{
    return $url_custom;
}

ただし、これを行うより良い方法があると確信しています。まず第一に、HTTP_HOST には 'http://' が含まれていないため、手動で追加する必要があります。だから、私より頭のいい人、教えてください。

ああ、いいえ..事前に定義されたサブドメインはありません。単純なワイルドカード *.domain.tld を設定しているので、すべてのサブドメインがメイン スクリプトに移動します。解決策の検索から、サブドメインを手動で作成することを提案する多くの回答が見つかったため、これを言っているだけです。これは、私が求めているものとはまったく関係がありません。

4

2 に答える 2

3

$_SERVER['HTTP_HOST']Web サーバーから PHP に別のパラメーターを渡したい場合を除き、これが正しい方法です。

プロトコルに関しては、リクエスト プロトコル$_SERVER['HTTPS']http.

array_shiftサブドメインを抽出するには、使用してから実行することを検討できます

$subdomain = array_shift(explode('.', $_SERVER['HTTP_HOST']));

しかし、一般的にあなたが持っているのは、それがどのように行われるべきかです。

于 2013-03-28T20:17:27.427 に答える
2

すでに述べ$_SERVER['HTTP_HOST']たように、行く方法です。

しかし、あなたのコードにはエラーがあります。送信されたホスト名は 2 つまたは 3 つのコンポーネントで構成されていると想定していますが、それを確信することはできません。あなたも少なくともチェックする必要がありcount($hosts)ます。

たとえば、自分のサイトに domain.tld を使用している場合は、最初にdomain.tldが送信されたかどうかを確認することをお勧めします (ページをすばやく返します)。次に、サブサイトを返すかどうかsubstr($_SERVER['HTTP_HOST']...,-11)==='.domain.tld'を確認し、そうであれば、サブサイトを返します (サブドメインの任意のレベルで動作しますが、それでも高速です); それ以外の場合は、完全に外部のドメインがルーティングされているため、エラー回復. 注意すべき重要なことは、階層のトップからのドメイン マッチングは、ホスト名文字列を右揃えでマッチングすることを意味するということです。

        .domain.tld | subsite-pattern
   sub12.domain.tld | MATCH
   sub12.dumain.tld | NO MATCH
    sub12domain.tld | NO MATCH
于 2013-03-28T20:41:26.993 に答える