Obsługa wildcards w PHP

seohost

Przykładowy skrypt w PHP do obsługi tzw. wildcards w Joomla. Pomysł był taki, aby na jednej instalacji Joomla stworzyć wiele stron z różnymi poddomenami. Dodatkowo jeżeli użytkownik wpisze tylko część subdomeny – adres zostanie uzupełniony zgodnie z podanymi regułami. Niestety skrypt mimo iż działał bez zarzutu – nie był „googlebot friendly” 😉 – google nie potrafiło poprawnie zindeksować strony z powodu zbyt wielu przekierowań. Chwilowo nie mam czasu go dokładniej analizować. Powiem w skrócie. Na początku wyciągamy wpisaną przez użytkownika poddomenę. Jeżeli nie ma poddomeny to przekierowujemy na stronę główną. Jeżeli jest sprawdzamy czy strona ma przedrostek www i ew. go usuwamy, bądź nie (aby uniknąć tzw. double content) – inaczej tylko strona z www lub bez będzie zawsze wyświetlana (to zależy od nas) – to jest dodatkowa funkcjonalność skryptu. Na końcu mamy część właściwą, czyli przekierowywanie w zależności od wpisanej subdomeny – do odpowiedniej strony.

$subdomain=$_SERVER['HTTP_HOST'];
$subdomain=str_ireplace(".jakas_domena.pl","",$subdomain);
$www = "";
if (stripos($subdomain, 'www.') === 0) {
$www = "www.";
$subdomain=str_ireplace("www.","",$subdomain);
} 

function LoadSubdomain($loc){
if ($_SERVER[QUERY_STRING]=="")
header('Location: '.$loc);
} 

function LoadDomain() {
global $www;
header('Location: http://'.$www.'jakas_domena.pl');
exit();
} 

function LoadSubdomainIfMatch($dom, $match){ 
global $subdomain, $www;
if (preg_match($match,$subdomain)) {
header('Location: http://'.$www.$dom.'.jakas_domena.pl');
exit();
}
}

switch($subdomain) {
case 'jakas_subdomena_1':LoadSubdomain('adres_www');
break;
case 'jakas_subdomena_2': LoadSubdomain('adres_www'); break;
case 'jakas_subdomena_3': break;
case 'jakas_domena_1': break;
case '': break;
default:
LoadSubdomainIfMatch('jakas_subdomena_1', '/poczatek_ciagu_subdomeny(.*)/'); 
LoadSubdomainIfMatch('jakas_subdomena_2', '/poczatek_ciagu_subdomeny(.*)/');
LoadSubdomainIfMatch('jakas_subdomena_3', '/poczatek_ciagu_subdomeny(.*)/');
LoadDomain();
}