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

62
У многих возникает необходимость использовать поддомены для своих проектов на базе 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/)

Всё очень просто, думаю смысл понятен.
  • +31
  • 16 марта 2009, 12:43
  • ort

Комментарии (55)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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