Доброе время!
Условия:
1. Есть виртуальный хостинг у стороннего проф.хостера
(конкретно - Masterhost).
2. Есть возможность Rewrite'ов в .htaccess.
3. Доступа к httpd.conf нет.
4. Адрес домашней директории: /home/u1234/site.ru/www/
5. Все запросы вида http://чтоугодно.site.ru
переадресуются в домашнюю директорию.
Задача:
Организовать передачу запросов вида
http://vhost.site.ru в директорию
/home/u1234/site.ru/www/vhost/ для любых имен vhost,
равно как и http://www.vhost.site.ru - туда же.
При этом регистр написания vhost.site.ru и www.vhost.site.ru - любой,
а регистр наименования папки /vhost/ - всегда lowercase.
Попытки решения:
-----------------------------------------------------------
Вариант 1 (из оригинального URL Rewriting Guide).
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.site\.ru$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.site\.ru(.*) /home/u1234/site.ru/www/$1$2
Не работает вообще. Возможно, происходит зацикливание
из-за совпадения части пути на сервере - /site.ru/ -
с адресом сайта.
-----------------------------------------------------------
Вариант 2 (предложен хостерами; так ими и не доделан).
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.joo\.ru$
RewriteRule ^(.+) %{HTTP_HOST}/$1 [C]
RewriteRule ^([^\.]+)\.joo\.ru/(.*)$ /$1/$2
Это якобы работает в httpd.conf в разделе virtual hosts,
но это непроверенный факт; и разыскивается решение для .htaccess.
-----------------------------------------------------------
Вариант 3.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^.+\.site\.ru$ [NC]
RewriteRule ^(.+) %{HTTP_HOST}$1
RewriteRule ^(.+)\.site\.ru http://site.ru/$1/ [NE,R]
Это работает в .htaccess, но происходит обычная
внешняя переадресация на http://site.ru,
а требуется организовать полноценный домен
третьего уровня.
-----------------------------------------------------------
Возможно, необходимо добавить что-то типа:
RewriteBase /home/u1234/site.ru/www/
Но что именно?
Как это должно выглядеть в окончательном варианте?
И как учесть регистр букв?
В результате моих "смелых экспериментов"
сервер хост-провайдеров просто виснет из-за
некоего зацикливания следующего вида:
"/site.ru/www/tmpsite.ru/www/tmpsite.ru/www/tmpsite.ru
/www/tmpsite.ru/www/tmpsite.ru/www/tmpsite.ru/www/tmpindex.php
/www/tmpindex.php"... и так далее.
Также смущает следующая фраза о Virtual Hosts
в URL Rewriting Guide:
"For HTTP/1.0 requests there is no solution,
but for HTTP/1.1 requests which contain a Host: HTTP header
we can use the following ruleset to rewrite
http://www.username.host.com/anypath internally to
/home/username/anypath:"
Что это значит практически - "For HTTP/1.0 requests there is no
solution"?
Также интересно: известны ли вообще успешные случаи
использования mod_rewrite для организации Virtual Hosts?
К большому сожалению, моих знаний для решения этой проблемы
не хватает. Очень рассчитываю на помощь людей,
понимающих mod_rewrite и связанные с этим моменты.
Заранее спасибо.
Использовались следующие источники вдохновения:
URL Rewriting Guide - http://httpd.apache.org/docs/misc/rewriteguide.html
(особенно в части "Virtual User Hosts")
mod_rewrite docs - http://httpd.apache.org/docs/mod/mod_rewrite.html
--
Всех благ,
joo mailto:apache@joo.ru
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =