Использование поддоменов в LiveStreet
У многих возникает необходимость использовать поддомены для своих проектов на базе LiveStreet, например вынести на поддомены блоги.
Сделать это можно разными путями, например через реврайты в .htaccess, либо через роутер движка.
Я покажу как это можно сделать на примере последнего варианта, т.е. через роутер.
Все изменения касаются только конструктора в классе Router.class.php и правильных ссылок на сущности с поддоменами.
В этом примере на поддоменах находятся компании и работают они по таким ссылкам:
yandex.site.ru => site.ru/company/about/yandex/
yandex.site.ru/blog/ => site.ru/company/blog/yandex/
Причем сохраняется работоспособность и по старому варианту(site.ru/company/about/yandex/)
Всё очень просто, думаю смысл понятен.
Сделать это можно разными путями, например через реврайты в .htaccess, либо через роутер движка.
Я покажу как это можно сделать на примере последнего варианта, т.е. через роутер.
Все изменения касаются только конструктора в классе Router.class.php и правильных ссылок на сущности с поддоменами.
protected function __construct() {
//Конфиг роутинга, содержит соответствия URL и классов экшенов
$this->aConfigRoute=include("./config/config.route.php");
if (get_magic_quotes_gpc()) {
func_stripslashes($_REQUEST);
}
$sReq=preg_replace("/\/+/",'/',$_SERVER['REQUEST_URI']);
$sReq=preg_replace("/^\/(.*)\/?$/U",'\\1',$sReq);
$sReq=preg_replace("/^(.*)\/\?.*$/U",'\\1',$sReq);
$aRequestUrl = ($sReq=='') ? array() : explode('/',$sReq);
for ($i=0;$i<SYS_OFFSET_REQUEST_URL;$i++) {
array_shift($aRequestUrl);
}
/**
* проверяем есть ли поддомен при запросе
*/
$sPrimaryHost=str_replace('http://','',DIR_WEB_ROOT);
$sSubDomain=str_replace('.'.$sPrimaryHost,'',$_SERVER['HTTP_HOST']);
if ($sSubDomain!='' and $sSubDomain!='www' and $sSubDomain!=$sPrimaryHost) {
self::$sAction='company';
if (!(self::$sActionEvent=array_shift($aRequestUrl))) {
self::$sActionEvent='about';
}
array_unshift($aRequestUrl,$sSubDomain);
} else {
self::$sAction=array_shift($aRequestUrl);
self::$sActionEvent=array_shift($aRequestUrl);
}
foreach ($aRequestUrl as $key => $value) {
$aRequestUrl[$key]=urldecode($value);
}
self::$aParams=$aRequestUrl;
}
В этом примере на поддоменах находятся компании и работают они по таким ссылкам:
yandex.site.ru => site.ru/company/about/yandex/
yandex.site.ru/blog/ => site.ru/company/blog/yandex/
Причем сохраняется работоспособность и по старому варианту(site.ru/company/about/yandex/)
Всё очень просто, думаю смысл понятен.
56 комментариев
Только вот почему описание с применением модуля компании — хотя его в свободном доступе нет
думаю было бы рациональнее написать на примере юзера и тд
И по юзерам скоро появится полное решение, это лишь наброски.
P.S> мне кажется надо оставлять доступ только по одному варианту доступа к контенту (опять же из-за SEO).
ещё извиняюсь за оффтоп, но никак не могу нигде найти — когда примерно ожидается выход стабильной версии 0.3?
спасибо.
2. нигде не писалось, дату выхода держит в секрете НЛО =)
P.S> про компании не пишите сюда, давайте не будем засорять ветку (про них уже есть 3 топика).
Подскажите, в чем проблема? Спасибо.
то это код
вроде не сработает…
Или я ошибаюсь?
Если я поставлю следующий тариф то там максимум 1000 штук, но это тоже ведь не выход, лимит все равно есть! Как быть?
Так?
Это сделать достаточно легко.
В хосте апача нужно добавить запись:
если у Вас виртуальный хостинг, то Вам скорее всего откажут.
ну и само собой нужны редиректы в .htaccess
— Скажите пожалуйста, а-то я еще не до конца, понимаю ооп
Ну так как сделать такое для пользователей, формата логин.сайт.ру ??
Не у всех есть возможность так просто сделать поддомен вида: *.сайт
не у всех поддомены живут в корне основнного домена
не у всех апач
не у всех есть доступ к настройкам доменног имени и записям
ЗЫ а еще не у всех есть интернет, да и компьютеры тоже не у всех…
получил —
тут идёт строка
Я пытался через htaccess, но это гиблый вариант.
Может, кто реализовал?
Последнюю строчку понятное дело поправить под себя.