Использование поддоменов в LiveStreet

У многих возникает необходимость использовать поддомены для своих проектов на базе LiveStreet, например вынести на поддомены блоги.
Сделать это можно разными путями, например через реврайты в .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 комментариев

avatar
спасибо огромное!
avatar
Здорово было бы, если каждому юзеру отдельный поддомен. username.site.ru как на хабре!
avatar
дак там 2 строки попровить помоему, еще не разбирался, но сегодня вечером обязательно буду и если что опубликую
avatar
Спасибо! Ждемс=)
avatar
Спасибо, прям подарок для модуля «Компании» =)
avatar
в SVN это есть?
  • iko
  • +3
avatar
нет
avatar
Занимательно
Только вот почему описание с применением модуля компании — хотя его в свободном доступе нет
думаю было бы рациональнее написать на примере юзера и тд
avatar
Это не к модулю «Компании», у модуля другие ссылки к функционалу, надо все-равно переписывать будет, главное есть пример, по которому можно хоть к чему прикрутить.
И по юзерам скоро появится полное решение, это лишь наброски.

P.S> мне кажется надо оставлять доступ только по одному варианту доступа к контенту (опять же из-за SEO).
avatar
что мешает в проекте ставить ссылки только на вариант с поддоменами?
avatar
ничего не мешает =)
avatar
а в каком доступе есть модуль «Компании»? очень нужен.

ещё извиняюсь за оффтоп, но никак не могу нигде найти — когда примерно ожидается выход стабильной версии 0.3?

спасибо.
avatar
1. в доступе за 2500 рублей (под 0.2 версию), в среду можно будет пощупать под пре0.3
2. нигде не писалось, дату выхода держит в секрете НЛО =)

P.S> про компании не пишите сюда, давайте не будем засорять ветку (про них уже есть 3 топика).
avatar
вот спасибо. как раз вчера над этим думал )
avatar
Автор забыл упомянуть, что хостинг должен поддерживать резолвинг любых доменов по шаблону *.domain.ru (вайлдкардс). Создавать каждый поддомен вручную — не наш метод.
avatar
Верно, потому если NS сервер хостера не позволяет его нормально сконфигурировать идем на editdns.org и прописываем все по вкусу :)
avatar
можно поподробнее — что это значит?
avatar
ниже уже написали
avatar
Тут еще нужно написать, что сделать чтобы юзер залогиненным оказался при переходе на поддомен.
  • ozz
  • +1
avatar
в куках хост — .site.ru
avatar
В конфиге к кукам прописал адрес домена — но не работает.
$config['sys']['cookie']['host'] = '.moydomen.com'; // хост для установки куков

Подскажите, в чем проблема? Спасибо.
avatar
может кто нибудь конкретно расписать что и как сделать?
avatar
Было бы неплохо включить этот функционал в грядущую версию LS 0.3 как опцию.
avatar
хм… а если юзер(компания) зарегилась под ником «www»?

то это код
<code>if ($sSubDomain!='' and $sSubDomain!='www' and $sSubDomain!=$sPrimaryHost) {  </code>

вроде не сработает…

Или я ошибаюсь?
  • iko
  • +1
avatar
нужно запретить такую регу
avatar
Очень интересно конечно, но я пока не смогу это использовать, у меня стоит лимит на поддомены ( максимум 5 штук!
Если я поставлю следующий тариф то там максимум 1000 штук, но это тоже ведь не выход, лимит все равно есть! Как быть?
avatar
достаточно завести один поддомен вида: *
avatar
Это как это, я не до конца понял, т, е официально поддмен будет один, но в нем будет htaccess который будет редиректить на адреса юзеров?
Так?
avatar
называется Wildcard DNS record. В ДНС зоне нужно сделать запись:
<code>*.site.ua IN A serverIP(адрес сервера)</code>
Это сделать достаточно легко.

В хосте апача нужно добавить запись:
<code>ServerAlias *. mydomain.com</code>
если у Вас виртуальный хостинг, то Вам скорее всего откажут.

ну и само собой нужны редиректы в .htaccess
avatar
Можно сделать хитрее и без напряга администрации хостинга. Сам недавно узнал. в cPanel к примеру можно средствами панели добавить домен *.domain.ru и прилинковать его к папке главного домена. Думаю другие панели тоже позволят. По сути получится то же самое, что предложено ниже, но вам думаю будет проще.
avatar
Тоже хотел бы услышать про этот метод
avatar
Как сделать такое для пользователей?
— Скажите пожалуйста, а-то я еще не до конца, понимаю ооп
avatar
предлагаю сначала разобраться в PHP+ООП, а потом уже копать внутренности движка. Иначе будет возникать большое количество лишних вопросов
avatar
Как раз купил книжку))
Ну так как сделать такое для пользователей, формата логин.сайт.ру ??
avatar
Очень слабенько написано, работать будет мало у кого!
Не у всех есть возможность так просто сделать поддомен вида: *.сайт
не у всех поддомены живут в корне основнного домена
не у всех апач
не у всех есть доступ к настройкам доменног имени и записям

avatar
написано только то, что касается непосредственно кода движка

ЗЫ а еще не у всех есть интернет, да и компьютеры тоже не у всех…
avatar
IMHO так должно сработать )) Если что — чур меня не пинать

RewriteRule ^[a-z]\.вашсайт\.ru$ http://вашсайт.ru/my/$1 # Посты
RewriteRule ^[a-z]\.вашсайт\.ru/profile?/$ http://вашсайт.ru/profile/$1 # Профили

avatar
нет так не сработает
avatar
попытался так сделать
получил —
Parse error: syntax error, unexpected T_PROTECTED in /var/www/vhosts/cstd.me/httpdocs/config/config.route.php on line 75

тут идёт строка
protected function __construct() {
avatar
Ну что, есть какие-то результаты?)
Я пытался через htaccess, но это гиблый вариант.
Может, кто реализовал?
avatar
но есть одна пробьлеммка, междоменный яваскрипт болкируется браузерами…
avatar
В 0.4.2 сработает такой вариант?
avatar
по идее можно как-то так решить:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)/$ /userpage.php?user=$1

Последнюю строчку понятное дело поправить под себя.
avatar
up
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.