imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Интернет, Глобальные и Локальные сети > Сети
Опции темы
Старый 18.06.2004, 13:50     # 1
Creed
Guest
 
Сообщения: n/a

виртуальные хосты и mod_rewrite

Я хочу настроить виртуальные хосты используя mod_rewite (подразумевается создание сервера с динамическими хостами), но проблема в том, что сервер упорно не хочет понимать пути. Сам сервак -apache 2.0.44 - стоит на машине с NT5.1+SP1.

Допустим есть запрос http://mail.home/

вот часть конфига сервера:
Код:
RewriteEngine On 

RewriteLogLevel 12 
RewriteLog      /var/logs/apache/apache_rewrite-log 

RewriteMap  lc int:tolower 
RewriteMap  vhostsmap txt:/hosts/vhosts.map 

RewriteCond ${lc:%{HTTP_HOST}|NONE} ^(.+)$ 

RewriteCond %1 !^.*gcserver.home$ 

RewriteCond ${vhostsmap:%1} ^/(.*)$ [NC] 
RewriteRule ^/(.*)$ /hosts/%1/www/$1
зыж никакие директивы VirtualHost и NameVirtualHost не используются и не должны использоваться.

путь /hosts/home/mail/www/ что вышел в конце, реально существует.

Вот что нам выдал сервак в логе:
Код:
init rewrite engine with requested uri /
applying pattern '^/(.*)$' to uri '/'
map lookup OK: map=lc key=mail.home -> val=mail.home
RewriteCond: input='mail.home' pattern='^(.+)$' => matched
RewriteCond: input='mail.home' pattern='!^.*gcserver.home$' => matched
cache lookup FAILED, forcing new map lookup
map lookup OK: map=vhostsmap key=mail.home[txt] -> val=/home/mail
RewriteCond: input='/home/mail' pattern='^/(.*)$' => matched
rewrite / -> /hosts/home/mail/www/
local path result: /hosts/home/mail/www/
есть мнение, что он подставляет этот путь к своему DOCUMENT_ROOT пути, но я менял этот путь на /hosts/ предварительно это вычеркнув из /hosts/%1/www/$1 и все равно без результатно.
 
Старый 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
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:19.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.