Переписать виртуальный поддомен в подпапку и сохранить исходный URL

Я искал в Интернете несколько дней, но не нашел ответа на свой вопрос. Вот что я хочу сделать:

Каждый пользователь на моем сайте получает личный субдомен, например http://username.domain.com. Конечно, это виртуальный поддомен.

Теперь я уже установил подстановочную запись DNS A, включил mod_rewrite и добился этого:

Когда кто-то переходит на http: // anysubdomain.domain.com, он перенаправляется на http: // www.domain.com/sub/index.php?var=anysubdomain. В index.php есть функция, которая получает уникальную информацию на основе переменной 'var' (имя поддомена).

Что я хочу сделать, так это когда кто-то переходит на http: // anysubdomain.domain.com, он перенаправлен на http: // www.domain.com/sub/index.php?var=anysubdomain (как сейчас), но это исходный URL-адрес (http: // anysubdomain.domain.com) сохраняется в строке браузера. Так что действительно похоже, что у каждого пользователя есть свой поддомен.

Это файл htaccess, который я сейчас использую:

RewriteEngine On 
Options +FollowSymlinks 


RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{HTTP_HOST} !^static\.domain\.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.domain.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/sub/index.php?username=%2 [L]

Надеюсь, все понятно, если нет: спрашивайте, а я предоставлю дополнительную информацию!

Заранее спасибо!

Юрий


person YuriH    schedule 13.10.2012    source источник


Ответы (1)


Пока все ваши поддомены и ваш основной домен используют один и тот же корень документа, вы можете просто избавиться от бита http://www.domain.com в своих правилах:

RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{HTTP_HOST} !^static\.domain\.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.domain.com$ [NC] 
RewriteRule ^(.*)$ /sub/index.php?username=%2 [L]

В противном случае вам нужно будет использовать mod_proxy, добавив флаг P:

RewriteCond %{HTTP_HOST} !^www\.domain\.com
RewriteCond %{HTTP_HOST} !^static\.domain\.com
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)\.domain.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/sub/index.php?username=%2 [L,P]

Хотя первый способ будет намного эффективнее.

person Jon Lin    schedule 14.10.2012
comment
Как я могу добиться, чтобы все мои поддомены имели тот же корень документа, что и основной домен? Это текущая структура: /domains/domain.com/htdocs/ - основной домен - статический Поскольку мои поддомены виртуальные (за исключением статического поддомена), на самом деле у них нет корня (или я ошибаюсь?). Когда я избавляюсь от "domain.com" в моем файле .htaccess, возникает внутренняя ошибка сервера 500. То же самое, когда я использую mod_proxy, добавляя флаг P. - person YuriH; 15.10.2012
comment
@YuriH, скорее всего, все ваши поддомены имеют один и тот же корень документа, в противном случае вам нужно обратиться в службу поддержки вашего хостинга. - person Jon Lin; 15.10.2012