2016-11-17 34 views
0

我有一个Joomla!站点设置了一个Joomla实例使用多个域的情况。该网站的根域是www.pky.com。当访问我们购买的名称列表中的任何其他域名时,它们被定向到根域,但我正在使用php脚本通过测试URI来重定向到正在查看的“站点”的相应域名。一些用于网站的网址是否exampleone.pky.com,exampletwo.pky.com等使用正则表达式来测试url重定向的所有可能的字母,数字或字符

我们在站点的index.php文件重定向脚本设置,象这样:

<?php 
$domain = $_SERVER["HTTP_HOST"]; 
$requri = $_SERVER['REQUEST_URI']; 


if ((($domain == "pky.com") || ($domain == "www.pky.com") || ($domain == "citywestplace.pky.com") || ($domain == "www.citywestplace.pky.com") || ($domain == "gwplazahouston.com") || ($domain == "www.gwplazahouston.com") || ($domain == "greenwayplaza.pky.com") || ($domain == "www.greenwayplaza.pky.com") || ($domain == "postoakhouston.com") || ($domain == "www.postoakhouston.com") || ($domain == "postoakcentral.pky.com") || ($domain == "www.postoakcentral.pky.com") || ($domain == "sanfelipeplaza.com") || ($domain == "www.sanfelipeplaza.com") || ($domain == "sanfelipeplaza.pky.com") || ($domain == "www.sanfelipeplaza.pky.com")) && ($requri == "/index.php/citywestplace-marketing")) { 
    header("Status: 301 Moved Permanently"); 
    header("Location: http://www.citywesthouston.com$requri"); 
} 

我们的主要问题之一是,有人进入foo.pky.com仍然会出现在反过来破坏脚本的站点。有没有办法将变量设置为正则表达式,以适应字母,数字和其他字符的所有可能变化,然后将该变量作为url的一部分使用,以便它也被重定向到根域?

例如:

$myvar = some regex here; 

if (($domain == "pky.com") || ($domain == "www.pky.com") || ($domain == $myvar . ".pky.com") || ($domain == "www" . $myvar . ".pky.com"))... 

必须有一个更好的方式来做到这一切,但我仍然在学习。

预先感谢您。

编辑

所以我说:

if (((preg_match(`.*\.pky\.com`, $domain)) || (preg_match(`www\..*\.pky\.com`, $domain))) && ($menutype == "mainmenu")) { 
    header("Status: 301 Moved Permanently"); 
    header("Location: http://www.pky.com"); 
} 

检查是否在pky.com & &前面当前菜单类型是 “MainMenu的” 添加任何东西。我检查了阿齐兹提到的正则表达式;然而,输入:

foo.pky.com仍然转到url foo.pky.com,而不是重定向到pky.com。

+0

正则表达式'。* \。pky \ .com'应该这样做 –

回答

0

首先,你可以从parse_url域(),那么当你的主机,你可以使用simple regex例如:

$allowedUrls = [ 
    'test.com', 
    'google.com' 
]; 

if (preg_match(`#.*pky\.com$#gm`, $domain) || in_array($domain, $allowedUrls)) { 
    // OK 
} 

即使没有正则表达式有可能检查域与pky.com

(substr($domain, -7) === "pky.com"); 
结束
+0

如果我在开始处删除“#”,并在结尾处删除“#gm”,则此处使用的正则表达式有效。 –

+0

'##'被用作分隔符http://php.net/manual/en/regexp.reference.delimiters.php它们是必需的 – Robert

相关问题