我正在尝试使用正则表达式检查或验证子域/域,请检查这是我想要的:
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'] 是否等于这个域或子域之一,如果是 equeal,那么我打印标头策略。
我想用正则表达式来做到这一点,因为如果我将子域/域放在列表中,这将太长了。有什么帮助吗?
简历:我有三个域:domain.com,domain.ws 和 test.com(每个域的子域),我想通过此验证。
好吧,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
文档。
试试这个
preg_match("/".addcslashes($_SERVER["DOCUMENT_ROOT"],"/")."/(w+)//",$_SERVER["SCRIPT_FILENAME"],$d);
$sub = $d[1];