domen.ru/user.php?name=xxx -> xxx.domen.ru

S
На сайте с 23.12.2007
Offline
21
744

Хочу сделать чтобы каждый зареганый на сайте пользователь мог иметь свой сайт третьего уровня. Возможно ли сделать примерно так:

domen.ru/user.php?name=xxx -> xxx.domen.ru

в крайнем случае... знаю что можно

domen.ru/xxx/ -> xxx.domen.ru

но не знаю как реализовать

сервер естественно собственный, естественно это должно делаться автоматом. Наверно через алиасы как-то. Помогите, товарищи.

go!!!!!!!!!!!!!!!
J
На сайте с 03.07.2006
Offline
122
#1

на форуме phpclub.ru кажется видел темы по такому поводу, но туда не заходил.

посмотри там в поиске вбей mod_rewrite

Тимонин Александр, Тольятти. Вконтакте https://vk.com/my.face (https://vk.com/my.face) Управление ссылками на своих сайтах + Контекстные ссылки (/ru/forum/489616) Скрипты, недорого отзывы от форумчан (/ru/forum/268922)
C
На сайте с 01.06.2006
Offline
19
#2

1) надо сконфигурить name сервер чтобы резолвились все поддомены

что-то типа

*.domain.tld. IN A 1.2.3.4

2) в секцию конфигурации виртуального хоста добавляем алиас на все поддомены

<VirtualHost 111.22.33.55>

DocumentRoot /www/subdomain

ServerName www.domain.tld

ServerAlias *.domain.tld

</VirtualHost>

3) внутри самого скрипта распознаем домен и выводим нужную инфу

S
На сайте с 23.12.2007
Offline
21
#3

а если

domen.ru/users/user.php?name=xxx -> xxx.domen.ru

нужно чтобы domen.ru функциклировал как самостоятельный сайт, а если человек набирает домен 3 уровня, то попадает в папку domen.ru/users/, тут модом реврайтом как-то нужно делать.

на phpclub.ru искал уже.

C
На сайте с 01.06.2006
Offline
19
#4

можно и через mod_rewrite

можно и так

3) внутри самого скрипта распознаем домен и выводим нужную инфу

эта часть - состоит буквально из пары строк

$server_host = explode('.', $_SERVER['HTTP_HOST']);

$subdomain = strtolower($server_host[0]);

а тут уже делайте, что в голову взбредет - хоть основную страницу выводите хоть страницу юзера

Cheg добавил 14.03.2008 в 12:40

sibin, на тему модрерайта вот смотри

http://server-tuning.info/apache/auto-subdomains.html

S
На сайте с 23.12.2007
Offline
21
#5

Ой спасибо Cheg за вразумление, а то я в это mod revrite уперся...

Привожу ниже полное решение проблемы, может кому пригодится.

Естественно DNS должен быть настроен так, чтобы все поддомены шли на ваш IP

Ось - ubuntu.

в папке /etc/apache2/sites-avaliable/:

1 фаил domen.ru

<VirtualHost *:80>

ServerAdmin info@domen.ru
ServerName domen.ru
ServerAlias www.domen.ru
DocumentRoot /var/www/user/domen.ru

<Directory /var/www/user/domen.ru/>
Options +FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /var/www/user/domen.ru/cgi-bin/
<Directory "/var/www/user/domen.ru/cgi-bin/">
AllowOverride All
Options None
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/www/user/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/www/user/access.log combined
ServerSignature off
</VirtualHost>

2 фаил xxx.domain.ru

<VirtualHost *:80>

ServerAdmin info@domen.ru
ServerName *.domen.ru
ServerAlias *.domen.ru
DocumentRoot /var/www/user/domen.ru/users

<Directory /var/www/user/domen.ru/users/>
Options +FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /var/www/user/domen.ru/users/cgi-bin/
<Directory "/var/www/user/domen.ru/users/cgi-bin/">
AllowOverride All
Options None
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/www/user/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/www/user/access.log combined
ServerSignature off
</VirtualHost>

В консоли:

sudo a2ensite domen.ru

sudo a2ensite xxx.domen.ru

sudo /etc/init.d/apache2 restart

Соответственно пути и настройки подбирайте под себя. БЛагодаря этим настройкам пользователи со всех поддоменов пойдут в папку domen.ru/users/

Ну и там соответственно их встретит скрипт аля:

<?php

$server_host = explode('.', $_SERVER['HTTP_HOST']);
$subdomain = strtolower($server_host[0]);
$user=$subdomain;
$x=$_GET['x'];

$y=$_GET['y'];

?>
<br><br><br><p align="center" valign="center"><font size="8"> Сайт пользователя <?php echo $user; ?> </font>
<br><br><br>
<?php echo " раздел ".$x;
echo ", страница".$y;?>
</p>

sibin добавил 14.03.2008 в 18:51

так лучше :)

<?php

$server_host = explode('.', $_SERVER['HTTP_HOST']);

$subdomain = strtolower($server_host[0]);

if($subdomain=='www') {$subdomain = strtolower($server_host[1]);}

$user=$subdomain;

$x=$_GET['x'];

$y=$_GET['y'];

?>

<br><br><br><p align="center" valign="center"><font size="8"> Сайт пользователя <?php echo $user; ?> </font>

<br><br><br>

<?php echo " раздел ".$x;

echo ", страница".$y;?>

</p>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий