Субдомен имени пользователя (user.instantcms.ru)

+30
4.7K
Продолжаем усоциаливать инстант
Как сделать имена типа user.instantcms.ru
Открываем core/cms.php строка 1526
в конце функции detectURI(), перед "return $uri;"
вставить
  1. //tarzan обработка субдоменов
  2. $inDB = cmsDatabase::getInstance();
  3. if (strpos($_SERVER['HTTP_HOST'],'www.')!==false){
  4. header('location: http://site.com'.$_SERVER['REQUEST_URI']);
  5. }
  6.  
  7. if (preg_match('/([a-z,A-Z,0-9,\-,\_]+)\.site\.com/', $_SERVER['HTTP_HOST'], $matches)){
  8.  
  9. if (isset($matches[1])){
  10. $q = "SELECT id,login FROM cms_users WHERE login LIKE '".mysql_real_escape_string($matches[1])."' LIMIT 0,1";
  11. $result = $inDB->query($q) ;
  12. //если есть такой пользователь - обрабатываем
  13. if ($r = $inDB->fetch_assoc($result)){
  14. if ($_SERVER['QUERY_STRING']=='') {
  15. $uri='users/'.$r['login'];} //показываем страницу профиля
  16. elseif (!strstr($_SERVER['QUERY_STRING'],'users/'.$r['login'])){
  17. //если запрошена страница вне профиля пользователя, перенаправляем в основной адрес
  18. header('location: http://site.com'.$_SERVER['REQUEST_URI']);
  19. }
  20. }
  21.  
  22. }
  23. }
  24.  
Естественно, в настройках хостинга должна быть включена обработка несуществующих субдоменов основным сайтом
Внимание! Данная модификация может негативную SEO-реакцию, т.к. порождается много субдоменов с одинаковыми description
По поводу SEO — не ко мне

примеры: 1c.allmarkets.com.ua, incolor.allmarkets.com.ua/
0
Sergey Platonov Sergey Platonov 13 лет назад #
опана ... а у меня немного другого характера надо - но короче и так и так не подходит пока ... мне нужно чтоб к примеру по адресу poddomen.site.ru открывалась статья с сайта, это можно сделать но ... не подходит тот вариант, что тут потому, что если как написано выше заходим на http://incolor.allmarkets.com.ua/ к примеру - жмём на сылку форум - переходим на http://incolor.allmarkets.com.ua/forum/ вместо http://allmarkets.com.ua/forum/ ((( думаю смысл понятен
0
Protomoto Protomoto 13 лет назад #
Сергей, а Вы проверяли?
так в том-то и дело, что изменяется нормально после перехода
0
Sergey Platonov Sergey Platonov 13 лет назад #
точно - только что проверил, и вправду ссылка перекидывает на сайт второго уровня с третьего... теперь бы разобраться как сделать такой редирект на статьи и причём только на определённые а не на все
0
Эдька Эдька 13 лет назад #
классная доработка.. только вчера об этом думал) +
+1
googlebot googlebot 13 лет назад #
Спасибо, прикольно, насколько я понимаю так же можно сделать для объектов instantmaps?
0
Protomoto Protomoto 13 лет назад #
да, скорее всего
0
reload reload 13 лет назад #
А можно это модифицировать не для всех, а для избранных?)
Или с кармой допустим связать? - набрал карму 100 - держи личный домен))
0
Protomoto Protomoto 13 лет назад #
ну конечно можно. Принцип, я думаю, понятен, но дописывать каждому по желанию я, пожалуй, не буду
0
reload reload 13 лет назад #
зы: спасибо за хак!
+3
Сергей Игоревич Сергей Игоревич 13 лет назад #
Код PHP:
$inDB = cmsDatabase::getInstance();
if (strpos($_SERVER['HTTP_HOST'],'www.')!==false){
	header('location: http://yamolodoi.ru'.$_SERVER['REQUEST_URI']);
	exit;
}
	
if (preg_match('/([a-z,A-Z,0-9,\-,\_]+)\.yamolodoi\.ru/', $_SERVER['HTTP_HOST'], $matches))
{

	if (isset($matches[1])){
		$q = "SELECT id,login FROM cms_users WHERE login LIKE '".mysql_real_escape_string($matches[1])."' LIMIT 0,1";
		$result = $inDB->query($q) ;
		//если есть такой пользователь - обрабатываем
		if ($r = $inDB->fetch_assoc($result))
		{
		//print_r($_SERVER);

 		  if ($_SERVER['REQUEST_URI'] == '/') 
 		  {
 		    //показываем страницу профиля
 		    $blog_sql = mysql_query("SELECT seolink FROM cms_blogs WHERE user_id = '".$r['id']."'");
 		    if(mysql_num_rows($blog_sql) == 1)
 		    {
 		      $uri='blogs/'.mysql_result($blog_sql,0);
 		    }
 		    else
		    {
		      header('location: http://yamolodoi.ru');
 		      exit;
 		    }
 		  } 
 		  else
 		  { 
 		  //если запрошена страница вне профиля пользователя, перенаправляем в основной адрес
 		    header('location: http://yamolodoi.ru'.$_SERVER['REQUEST_URI']);
 		    exit;
 		  }
 	      }
		
	}
}
А вот так вот будет если не на профиль а на блог перенаправлять :)
0
Protomoto Protomoto 13 лет назад #
отлично! +
0
Сергей Игоревич Сергей Игоревич 13 лет назад #
и с SEO не надо волноваться :)
0
WALTERZ WALTERZ 13 лет назад #
А для клубов можно ведь сделать?
0
Сергей Игоревич Сергей Игоревич 13 лет назад #
У клубов имён латынских нет... или как 1.suite.com ?
+1
Protomoto Protomoto 13 лет назад #
Можно сделать ВСЕ. Только нужно время, руки и голова
да, можно урл-поле приделать к клубам и по нему строить запросы. Какие проблемы? Работы с кофейком на полчаса-час
+1
Сергей Игоревич Сергей Игоревич 13 лет назад #
Ну я думаю суть то ясна модуля - нашёл что зашли с поддомена передал параметры поддомена условиям иначе свалил на главную...
0
lezginka.ru lezginka.ru 13 лет назад #
+
отличный хак.
если доработать, на платный тянет :)
0
WALTERZ WALTERZ 13 лет назад #
Подробнее про обработку несуществующих субдоменов:
В настройках DNS сервера добавляем новую запись *.site.ru типа А
Далее нужно задействовать ServerAlias. Открываем наши настройки apache домена, который будет обрабатывать нам субдомен и придаём следующий вид
ServerAlias www.site.ru *.site.ru
0
vitalson9 vitalson9 12 лет назад #
а можно по подробние про обработку несуществующих субдоменов а то меня перекидывает постоянно на user.sait.ru/login
0
floppox floppox 12 лет назад #
Проверялся ли приведенный код на 1.9? К сожалению, не могу запустить.
Хотя, возможно причина в неправильной настройке на хостинге, или еще в каком-то упущении, подскажите пожалуйста.

1. Во всех случаях теряется авторизация. Точнее, производится для каждого поддомена отдельно.
2. При вводе несуществующего имени пользователя открывается работающее зеркало сайта, по ссылкам ходим нормально, в адресной строке сохраняется поддомен. Так словно движок не обрабатывает домен вообще.
3. При вводе существующего имении ошибка Ошибка 310 (net::ERR_TOO_MANY_REDIRECTS): Обнаружено слишком много переадресаций. В адресной строке http://testuser.####.com/login
4. Убрав код, через один из поддоменов вошла на зеркало, прошла авторизацию. Вернула код. Теперь попадаем на страницу пользователя, но уйти с нее невозможно. При переходе по ссылкам отображаются разные пути внутри поддомена, а открытой остается страница пользователя.

По сути проблемы две: нет сквозной авторизации и не работает возврат на основной домен. Искать свои ошибки или дело в версии?

Еще от автора

Алфавитный указатель в статьях
Возникла необходимость навигации по статьям в категории через Алфавитный указатель (как в Универсальном каталоге) Реализовал.
FIX: Прозрачность PNG при ресайзе
Добрый день. Предлагаю исправление "забытой Богом" библиотеки /includes/graphic.inc.
Прямое имя пользователя (без /users/)
А как можно сделать чтоб адрес выглядел не как сейчас например http://instantcms.ru/users/nikitka просто http://instantcms.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.