извлекать субдомен в качестве переменной get

Привет, ребята, я настраиваю mywebapplication, чтобы предоставить уникальные URL-адреса для таких пользователей, как uniquename.mysite.com, anotheuniqname.mysite.com и т. Д.

Я хочу, чтобы в php-скрипте хватал субдоменную часть URL-адреса. Было бы неплохо, если бы я мог получить его как переменную GET – я думаю, что это можно сделать с помощью htaccess. Есть идеи?

$subdomain = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.')); 

Чтобы убедиться, что существует действительный субдомен:

 $urlExplode = explode('.', $_SERVER['HTTP_HOST']); if (count($urlExplode) > 2 && $urlExplode[0] !== 'www') { $subdomain = $urlExplode[0]; } else { // treat as www.mysite.com or mysite.com } 

Я бы попробовал это (в начале вашего PHP-кода):

 $_GET['subdomain'] = substr($_SERVER['SERVER_NAME'], 0, strrpos($_SERVER['SERVER_NAME'], '.')); 

Объяснение: strrpos найти последнее событие '.' в доступном домене substr возвращает строку до этой позиции. Я присвоил возвращаемое значение $_GET чтобы вы могли использовать ее, как если бы это был обычный URL-параметр.

Поместите это в свой файл начальной загрузки:

 $tmp = explode(".", $_SERVER["HTTP_HOST"], 2); $_GET["subdomain"] = $tmp[0]; 

Али. $_SERVER вы не имеете в виду переменную $_SERVER поскольку $_GET будет связана с querystring ??

если да, то вы можете попробовать:

 $_SERVER['HTTP_HOST'] 

Джим

[edit] – см. http://roshanbh.com.np/2008/05/useful-server-variables-php.html для нескольких примеров, которые могут помочь

Вы хотите что-то вроде:

 RewriteEngine On RewriteCond %{HTTP_HOST} ^[a-z0-9-]+\.yoursite\.com$ RewriteRule !^index\.php$ index.php [L] 

вы можете получить субдомен, используя

 <?php preg_match('/^http:\/\/([a-z0-9-]+)\.yoursite.com$', $_SERVER['HTTP_HOST'], $matches); $_GET['username'] = $matches[1]; ?> 

Если вы действительно хотите использовать mod_rewrite в вашем файле .htaccess , вы можете сделать что-то вроде этого (предполагая, что ваш скрипт – index.php в этом примере):

 RewriteEngine On # Prevent people from going to to index.php directly and spoofing the # subdomain value, since this may not be a desirable action RewriteCond %{THE_REQUEST} ^[AZ]+\sindex\.php.*(\?|&)subdomain= RewriteRule ^.*$ http://%{HTTP_HOST}/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} !^www RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)$ RewriteRule ^.*$ index.php?subdomain=%1 

Эта небольшая функция просто получит ваш « www.website.com » или в вашем случае « subdomain.website.com », а затем разделит его на 3 части ( 0=>"www", 1=>"website", 2=>"com" ) , а затем вернуть значение 1 , которое является либо " www ", либо вашим именем поддомена.

 function isSubdomain() { $host = $_SERVER['HTTP_HOST']; $host = explode('.',$host); $host = (is_array($host)?$host[0]:$host); return $host; } 

Exaple: Если ваш сайт « admin.website.com », вы получите « admin ».