Показать сообщение отдельно
Старый 19.07.2004, 13:26     # 2
Creed
Guest
 
Сообщения: n/a

Lightbulb Решение найдено

В общем, я разобрался с этой проблемой, хоть это и стоило огромных усилий и сотен перезапусков сервера

А загвоздка была вот в чем:
При получении результата (правило 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