1

我正在尝试使用正则表达式检查或验证子域/域,检查这是我想要的:

if($_SERVER['HTTP_ORIGIN'] == "^(.*\.?domain\.com)$"){
   header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
}

因此,如果子域是:es.domain.com、en.domain.com、etc.domain.com、domain.ws、test.com,那么我可以打印标题策略。

更多说明:我有几个子域(大约 40 个)和另外两个域(总共,3 个域),我需要知道 $_SERVER['HTTP_ORIGIN'] 是否等于这个域或子域之一,如果相等,那么我打印标题策略。

我想使用正则表达式来执行此操作,因为如果我将子域/域放在列表中,这将太长。有什么帮助吗?

简历:我有三个域:domain.com、domain.ws 和 test.com(每个域都有哪些子域),我想通过此验证。

4

2 回答 2

2

嗯,PHP 具有preg_*与正则表达式一起使用的功能。在你的情况下:

if(preg_match('/^(?:.+\.)?domain\.com$/', $_SERVER['HTTP_ORIGIN']))

如果您想更具体地了解允许的域和子域(允许任意组合 - 我假设二级域是别名):

if(preg_match('/^(?:(?:es|en|etc)\.)?(?:domain\.com|domain\.ws|test\.com)$/', $_SERVER['HTTP_ORIGIN']))

将允许您提到的任何主机名。

或者,您可以允许任何子域和域,捕获它们,然后检查它们。假设您有一组允许的子域和一组允许的二级域。

preg_match('/^(?:(.+)\.)?([^.]+\.[^.]+)$/', $_SERVER['HTTP_ORIGIN'], $matches);
$subdomain = $matches[1];
$domain = $matches[2];
if((!$subdomain || in_array($subdomain, $subdomainArray)) &&
   in_array($domain, $domainArray))
{
    ...
}

preg_match文档。

于 2012-11-30T00:05:46.217 回答
0

尝试这个

preg_match("/".addcslashes($_SERVER["DOCUMENT_ROOT"],"/")."\/(\w+)\//",$_SERVER["SCRIPT_FILENAME"],$d);

$sub = $d[1];
于 2012-11-30T00:54:54.043 回答