Игорь Т.
3 сообщения
#13 лет назад
Здравствуйте, столкнулся с, наверно, знакомой для многих проблемой реализации динамических поддоменов 3-го уровня.
Разрабатываю сайт, на котором вывод информации будет распределяться по городам. Соответственно для каждого города необходимо реализовать свой поддомен, примерно так получается: site.ru, city.site.ru, где city будет подставляться в зависимости от города.

Пытался воспользоваться модулем mod_rewrite, но понял что его тут не достаточно, т.к. еще необходимо настроить сам хост(или виртуальный хост, не знаю как правильно).
Сам довольно далек в настройке Апатча и его модулей.

Подскажите хоть в каком направлении копать.
Евгений О.
263 сообщения
#13 лет назад
Вам надо сделать, примерно, следующее:

1. В Ваш DNS прописать запись A, такую чтобы любой домен 3-го уровня разрешался на Ваш IP адрес. Точный формат записи я не помню, это можно посмотреть google, запросом навроде "named wildcard A record".

2. После этого в файле конфигурации Апач делаете виртуальный домен для Вашего сайта, так чтобы все поддомены 3-го уровня "попадали" в этот виртуальный домен:

<VirtualHost *:80>
ServerName
...
/VirtualHost>

Имя хоста в ServerName должно совпадать с именем Вашего сайта. Желательно, чтобы у апача этот виртуальный домен был единственным доменом.

3. На входе в Ваш скрипт определяете к какому домену был направлен запрос (имя домена передается в какой-то переменной окружения) и действуете соответственно.
Владимир М.
327 сообщений
#13 лет назад
См. также "алиасы/синонимы домена".
Алексей Р.
79 сообщений
#13 лет назад


На некоторых хостингах есть подобная функция.
Алексей Р.
79 сообщений
#13 лет назад
В .htaccess пишем что-то вроде

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
</IfModule>

А определяем для какого сайта выводить контент из переменной $_SERVER
Евгений О.
2989 сообщений
#13 лет назад
Если я правильно понял, надо все субдомены (домены) направить на один домен.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} oldsubdomain\.domain\.ru$
RewriteRule ^(.*)$
</IfModule>

Только такой редирект поисковики сразу отловят. Лучше действовать через настройку хостинга. Тут уже писали, но не до конца. Надо указать всем доменам одну и ту же корневую папку.

<VirtualHost *:80>
ServerName
DocumentRoot /www/folder
</VirtualHost>

<VirtualHost *:80>
ServerName
DocumentRoot /www/folder
</VirtualHost>

<VirtualHost *:80>
ServerName subdomain.domain1.ru
DocumentRoot /www/folder
</VirtualHost>

или через алиасы

<VirtualHost *:80>
ServerName
ServerAlias domain.ru *.domain.ru
DocumentRoot /www/folder
</VirtualHost>

как вариант с явным указанием субдоменов

<VirtualHost *:80>
ServerName
ServerAlias domain.ru sub1.domain.ru sub1 sub2.domain.ru sub2 sub3.domain.ru sub3
DocumentRoot /www/folder
</VirtualHost>
Алексей Р.
79 сообщений
#13 лет назад
Цитата ("Php"):
В .htaccess пишем что-то вроде

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
</IfModule>
Цитата ("elosoft"):
через алиасы

<VirtualHost *:80>
ServerName
ServerAlias domain.ru *.domain.ru
DocumentRoot /www/folder
</VirtualHost>