2012-07-30 64 views
1

我知道幾乎沒有關於PHP,所以這可能會讓人笑。php preg_match多個網址

我在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'); 
} 

這實際上可能是正確的語法就我所知:-)

回答

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'); 
} 
+0

謝謝,但它可能並不總是類似的網址。理想情況下,也許我需要一個數組,我可以根據需要添加其他網址。 – user460114 2012-07-30 08:02:31

+0

@ user460114請參閱我的編輯。 – xdazz 2012-07-30 08:05:38

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'); 
} 
1

嘗試,

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

這將是正確的RegEx語法。

比方說,你有一個網址陣列。

$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/'); 
}