Привет, ребята, я настраиваю 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
».