使用正则表达式测试url重定向的所有可能的字母、数字或字符


Using regex to test for all possible letters, numbers, or characters for url redirect

我有一个Joomla!一个Joomla实例使用多个域的站点设置。该站点的根域为www.pky.com。当访问我们购买的名称列表上的任何其他域名时,它们被定向到根域,但我使用php脚本重定向到通过测试URI查看的"站点"的适当域名。用于该站点的一些url是exampleone.pky.com、exampletwo.pky.com等。

我们在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前面是否添加了任何内容&&当前的菜单类型是"主菜单"。我检查了阿齐兹提到的正则表达式;然而,进入:

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

首先你可以从parse_url()中获得域名然后当你获得主机时你可以使用简单的正则表达式,例如:

$allowedUrls = [
  'test.com',
  'google.com'
];
if (preg_match(`#.*pky'.com$#gm`, $domain) || in_array($domain, $allowedUrls)) {
   // OK
}

即使没有regex,也可以检查域是否以pky.com

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