получить поддомен как переменную get - PullRequest
1 голос
/ 12 июля 2010

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

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

Ответы [ 7 ]

3 голосов
/ 12 июля 2010
$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
}
2 голосов
/ 12 июля 2010

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

$tmp = explode(".", $_SERVER["HTTP_HOST"], 2);
$_GET["subdomain"] = $tmp[0];
2 голосов
/ 12 июля 2010

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

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

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

1 голос
/ 12 июля 2010

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

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

$_SERVER['HTTP_HOST'] 

джим

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

0 голосов
/ 06 апреля 2013

Эта маленькая функция просто получит ваш "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;
}

Пример: если ваш сайт" admin.website.com ", вы получите" admin ".

0 голосов
/ 12 июля 2010

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

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];

?>
0 голосов
/ 12 июля 2010

Если вы действительно хотите использовать 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} ^[A-Z]+\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
...