Я хочу настроить виртуальные хосты используя mod_rewite, но проблема в том, что сервер упорно не хочет понимать пути
Допустим есть запрос
http://mail.home/
RewriteEngine On
RewriteMap lc int:tolower
#файл, где описаны имена доменов (пока что единственный home)
RewriteMap hostsmap txt:/hosts/hosts.map
#Собственно файл, где имена хостов и пути к documentroot (
#файл вида: mail.home /home/mail/www
RewriteMap vhostsmap txt:/hosts/vhosts.map
#Переводим в нижний регистр URL запрос
RewriteCond ${lc:%{HTTP_HOST}|NONE} ^(.+)$
#Вырезаем из запроса название домена
RewriteCond %1 ^.*\.([a-z]+)[/]*$
#Смотрим принадлежит ли оно виртуал хостам
RewriteCond ${hostsmap:%1} ^/(.*)$ [NC]
#теперь сравниваем запрос с имеющимися у нас виртуал хостами
RewriteCond ${vhostsmap:%{HTTP_HOST}} ^/(.*)$ [NC]
#и если все в порядке то получаем путь
RewriteRule ^/(.*)$ /hosts/%1/$1 [NC,PT]
на выходе получаем
/hosts/home/mail/www/
и все. дальше от сервера приходит ответ что запрос ошибочный, хотя каталог есть. в нем лежит
index.php
на сервере он указан в
DirectoryIndex
подскажите почему может такое быть?
Вот немного переделанный (что есть более правильный) вариант настройки:
Допустим есть запрос
http://mail.home/
RewriteEngine On
RewriteMap lc int:tolower
#Собственно файл, где имена хостов и пути к documentroot
#файл вида: mail.home /home/mail/www
RewriteMap vhostsmap txt:/hosts/vhosts.map
#Переводим в нижний регистр URL запрос
RewriteCond ${lc:%{HTTP_HOST}|NONE} ^(.+)$
#проверяем не хост ли сервера?
RewriteCond %{HTTP_HOST} !^[w]*\.(gcserver.home)$
#теперь сравниваем запрос с имеющимися у нас виртуал хостами
RewriteCond ${vhostsmap:%{HTTP_HOST}} ^/(.*)$ [NC]
#и если все в порядке то получаем путь
RewriteRule ^/(.*)$ g:/hosts/%1/$1 [NC,PT]
на выходе получаем
/hosts/home/mail/www/
и все. дальше от сервера приходит ответ что запрос ошибочный, хотя каталог есть. в нем лежит
index.php на сервере он указан в
DirectoryIndex
Вот пример лога:
(2) init rewrite engine with requested uri /
(3) applying pattern '^/(.*)$' to uri '/'
(5) map lookup OK: map=lc key=mail.home -> val=mail.home
(4) RewriteCond: input='mail.home' pattern='^(.+)$' => matched
(4) RewriteCond: input='mail.home' pattern='!^[w]*\.(gcserver.home)$' => matched
(4) RewriteCond: input='mail.home' pattern='^(.*)\.([a-zA-Z]+)[/]?$' => matched
(6) cache lookup FAILED, forcing new map lookup
(5) map lookup OK: map=vhostsmap key=mail.home[txt] -> val=/home/mail/www
(4) RewriteCond: input='/home/mail/www' pattern='^/(.*)$' => matched
(2) rewrite / -> g:/hosts/home/mail/www/
(2) forcing 'g:/hosts/home/mail/www/' to get passed through to next API URI-to-filename handler
подскажите почему может такое быть?[/code]