HTTP_HOST 値からサブドメインを抽出しようとしています。ただし、サブドメインに複数のドットが含まれていると、正しく一致しないという問題に遭遇しました。これが複数の異なるドメインで実行するスクリプトであり、ドットの数に制限がなく、tld が 1 つまたは 2 つの部分 (任意の長さ) である可能性があることを考えると、サブドメイン、ドメインを正しく一致させる実用的な方法はありますか?すべての状況でtld?
たとえば、次の HTTP_HOST 値と、一致する必要があるものを取り上げます。
- www.buggedcom.co.uk
- サブドメイン: www
- ドメイン: buggedcom.co.uk
- TLD: co.uk
- www.buggedcom.com
- サブドメイン: www
- ドメイン: buggedcom.com
- TLD: コム
- test.buggedcom.co.uk
- サブドメイン: テスト
- ドメイン: buggedcom.co.uk
- TLD: co.uk
- test.buggedcom.com
- サブドメイン: テスト
- ドメイン: buggedcom.com
- TLD: コム
- multi.sub.test.buggedcom.co.uk
- サブドメイン: multi.sub.test
- ドメイン: buggedcom.co.uk
- TLD: co.uk
- multi.sub.test.buggedcom.com
- サブドメイン: multi.sub.test
- ドメイン: buggedcom.com
- TLD: コム
これを達成する唯一の方法は、tlds のリストをロードすることであると推測しています。
以下は現在のコードです。
define('HOST', isset($_SERVER['HTTP_HOST']) === true ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_ADDR']) === true ? $_SERVER['SERVER_ADDR'] : $_SERVER['SERVER_NAME']));
$domain_parts = explode('.', HOST);
$domain_parts_count = count($domain_parts);
if($domain_parts_count > 1)
{
$sub_parts = array_splice($domain_parts, 0, $domain_parts_count-3);
define('SUBDOMAIN', implode('.', $sub_parts));
unset($sub_parts);
}
else
{
define('SUBDOMAIN', '');
}
define('DOMAIN', implode('.', $domain_parts));
var_dump($domain_parts, SUBDOMAIN, DOMAIN);exit;
サブドメインを get パラメータとして mod_rewrite に追加できると思いましたか?