В общем, я разобрался с этой проблемой, хоть это и стоило огромных усилий и сотен перезапусков сервера
А загвоздка была вот в чем:
При получении результата (правило
RewriteRule ^/(.*)$ /hosts/%1/www/$1), допустим есть путь
/hosts/home/mail/www/ подставлялся путь
DocumentRoot сервера, что приводило к такому результату:
g:/usr/local/apache/htdocs//hosts/home/mail/www/, соответственно получалась лажа.
Решилось все банально просто: путь
DocumentRoot сервера был изменен с
g:/usr/local/apache/htdocs/ на
g:/. Конечно были еще некоторые подстройки (ниже). И добавлена pass through опция, что позволяла передавать путь для дальнейших подстановок/преобразований серверу. И не маловажным было добавление опции No Subrequests чтобы исключить повторных добавлений пути!!
Вот пример конфига, что работает на данный момент:
Это файл vhosts.conf что подключается дополнительно к апачевскому конфигу.
Код:
#добавлены опции "по умолчанию", кстати без них тоже на работало
#причем, опция Indexes не должна быть включена! Иначе вместо
#получения index.php выводился листинг каталога.
Options FollowSymLinks ExecCGI MultiViews Includes
################################
RewriteEngine On
RewriteLogLevel 12
RewriteLog /var/logs/apache/apache_rewrite-log
################################
RewriteMap lc int:tolower
RewriteMap vhostsmap txt:/hosts/vhosts.map
#добавлена проверка на то, не является ли запрос на
#урл сервера, и если "да", то подставляем специфический путь.
RewriteCond %{HTTP_HOST} ^.*gcserver.home [NC]
RewriteRule ^/(.*)$ /usr/local/apache/htdocs/$1 [PT,L,NS]
RewriteCond ${lc:%{HTTP_HOST}|NONE} ^(.+)$
#RewriteCond %1 !^.*gcserver.home$
RewriteCond %1 ^([a-z0-9_-]+\.[a-z]+)[/]*$ [OR]
RewriteCond %1 ^www\.([a-z0-9_-]+\.[a-z]+)[/]*$
RewriteCond ${vhostsmap:%1} ^/(.*)$ [NC]
RewriteRule ^/(.*)$ /hosts/%1/www/$1 [PT,NS]
################################
<Directory "/hosts/*/*">
AllowOverride None
Order Allow,Deny
Deny from All
Options FollowSymLinks
</Directory>
<Directory "/hosts/*/*/www">
AllowOverride None
Order Allow,Deny
Allow from All
Options Indexes MultiViews IncludesNOEXEC FollowSymLinks
</Directory>
<Directory "/hosts/*/*/cgi">
AllowOverride None
Order Allow,Deny
Allow from All
Options Includes +ExecCGI FollowSymLinks
</Directory>
ScriptAlias /cgi/ /cgi/
ScriptAlias /cgi-bin/ /cgi/
################################
ВЫВОД: я добился чего хотел -- не нужно перезапускать апач при добавлении/удалении хостов
Остается решить как еще обойти ДНС, ведь при добавлении нового имени нужно перечитывать всю зону, после чего проходит минут 5-10 прежде, чем будет новый хост виден....
У меня стоит SimpleDNS v.3.20.02