2016-11-17 4 views
0

У меня есть Joomla! сайт, где несколько доменов используются для одного экземпляра Joomla. Корневой домен для сайта - www.pky.com. При посещении любого другого имени домена в списке имен, которые мы приобрели, они направлены в корневой домен, но я использую PHP-скрипт для перенаправления на соответствующее доменное имя для «сайта», просматриваемого путем тестирования URI. Некоторые из URL-адресов, используемых для сайта являются 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"))... 

Там должен быть лучший способ сделать все это, но я все еще учусь.

Заранее спасибо.

EDIT

Так я добавил:

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

Regex '. * \ .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

 Смежные вопросы

  • Нет связанных вопросов^_^