1

我对 php 几乎一无所知,所以这可能会让人发笑。

我在 index.php 中有这段代码,它检查主机头并在找到匹配项时重定向。

if (!preg_match("/site1.net.nz/",$host)) {
    header('Location: http://www.siteblah.net.nz/temp_internet_block.cfm');
}

但是,我需要在可能的多个站点上进行检查。如下。

if (!preg_match("/site1.net.nz/"|"/site2.net.nz",$host)) {
    header('Location: http://www.siteblah.net.nz/temp_internet_block.cfm');
}

这实际上可能是我所知道的正确语法:-)

4

4 回答 4

1
if (!preg_match("/(site1\.net\.nz|site2\.net\.nz|some\.other\.domain)/",$host)) {
    header('Location: http://www.siteblah.net.nz/temp_internet_block.cfm');
}
于 2012-07-30T08:04:12.383 回答
1

尝试,

$hosts="/(site1\.com)|(site2\.com)/";
if (!preg_match($hosts,$host)) {
  // do something.
}
于 2012-07-30T08:05:00.460 回答
0
// [12] to match 1 or 2
// also need to escape . for match real . otherwise . will match any char
if (!preg_match("/site[12]\.net\.nz/",$host)) {
    header('Location: http://www.siteblah.net.nz/temp_internet_block.cfm');
}

或者

if (!preg_match("/site1\.net\.nz|site2\.net\.nz/",$host)) {
    header('Location: http://www.siteblah.net.nz/temp_internet_block.cfm');
}
于 2012-07-30T08:01:40.780 回答
0
if (!preg_match("/(site1\.net\.nz|site2\.net\.nz)/",$host)) {
    header('Location: http://www.siteblah.net.nz/temp_internet_block.cfm');
}

这将是正确的 RegEx 语法。

假设您有一个 url 数组。

$array = Array('site1.net.nz', 'site2.net.nz');

foreach($array as &$url) {
   // we need to escape the url properly for the regular expression
   // eg. 'site1.net.nz' -> 'site1\.net\.nz'
   $url = preg_quote($url);
}

if (!preg_match("/(" . implode("|",  $array) . ")/",$host)) {
    header('Location: http://example.com/');
}
于 2012-07-30T08:13:56.160 回答