Использование поддоменов в LiveStreet
62
У многих возникает необходимость использовать поддомены для своих проектов на базе 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/)
Всё очень просто, думаю смысл понятен.
- +31
- 16 марта 2009, 12:43
- ort
Занимательно
Только вот почему описание с применением модуля компании — хотя его в свободном доступе нет
думаю было бы рациональнее написать на примере юзера и тд
Только вот почему описание с применением модуля компании — хотя его в свободном доступе нет
думаю было бы рациональнее написать на примере юзера и тд
Это не к модулю «Компании», у модуля другие ссылки к функционалу, надо все-равно переписывать будет, главное есть пример, по которому можно хоть к чему прикрутить.
И по юзерам скоро появится полное решение, это лишь наброски.
P.S> мне кажется надо оставлять доступ только по одному варианту доступа к контенту (опять же из-за SEO).
И по юзерам скоро появится полное решение, это лишь наброски.
P.S> мне кажется надо оставлять доступ только по одному варианту доступа к контенту (опять же из-за SEO).
Автор забыл упомянуть, что хостинг должен поддерживать резолвинг любых доменов по шаблону *.domain.ru (вайлдкардс). Создавать каждый поддомен вручную — не наш метод.
Очень интересно конечно, но я пока не смогу это использовать, у меня стоит лимит на поддомены ( максимум 5 штук!
Если я поставлю следующий тариф то там максимум 1000 штук, но это тоже ведь не выход, лимит все равно есть! Как быть?
Если я поставлю следующий тариф то там максимум 1000 штук, но это тоже ведь не выход, лимит все равно есть! Как быть?
Это как это, я не до конца понял, т, е официально поддмен будет один, но в нем будет htaccess который будет редиректить на адреса юзеров?
Так?
Так?
называется Wildcard DNS record. В ДНС зоне нужно сделать запись:
В хосте апача нужно добавить запись:
ну и само собой нужны редиректы в .htaccess
<code>*.site.ua IN A serverIP(адрес сервера)</code>Это сделать достаточно легко.
В хосте апача нужно добавить запись:
<code>ServerAlias *. mydomain.com</code>если у Вас виртуальный хостинг, то Вам скорее всего откажут.
ну и само собой нужны редиректы в .htaccess
Можно сделать хитрее и без напряга администрации хостинга. Сам недавно узнал. в cPanel к примеру можно средствами панели добавить домен *.domain.ru и прилинковать его к папке главного домена. Думаю другие панели тоже позволят. По сути получится то же самое, что предложено ниже, но вам думаю будет проще.
Комментарии (55)
RSS свернуть / развернуть