Подскажите, пожалуйста, решение данной проблемы.
Есть домен www.test.ru. Его внутренний путь /home/test/.
Нужно при помощи rewrite engine сделать так, чтобы при запросе
- first.test.ru данные брались из /home/test/users/first/
- second.test.ru данные брались из /home/test/users/second/
- third.test.ru данные брались из /home/test/users/third/
и т.д., в зависимости от субдомена.Как это сделать?
>Подскажите, пожалуйста, решение данной проблемы.
>Есть домен www.test.ru. Его внутренний путь /home/test/.
>Нужно при помощи rewrite engine сделать так, чтобы при запросе
> - first.test.ru данные брались из /home/test/users/first/
> - second.test.ru данные брались из /home/test/users/second/
> - third.test.ru данные брались из /home/test/users/third/
>и т.д., в зависимости от субдомена.
>
>Как это сделать?1. Надо чтоб named знал, что все поддомены имеют один IP.
2. В доке на mod_rewrite есть конкретно этот пример:
http://httpd.apache.org/docs/misc/rewriteguide.html
/Virtual User Hosts
>1. Надо чтоб named знал, что все поддомены имеют один IP.
Знает.>2. В доке на mod_rewrite есть конкретно этот пример:
>http://httpd.apache.org/docs/misc/rewriteguide.html
>/Virtual User HostsВот виртуалхост:
<VirtualHost www.poo.ru:80>
DocumentRoot "/home/design/poo"
ServerName poo.ru
ServerAlias www.poo.ru poo.ru *.poo.ru
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.poo\.ru$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.poo\.ru(.*) /home/design/poo/users/$1$2
</VirtualHost>При запросе www.test.poo.ru берет индекс из /home/design/poo/ а не из /home/design/poo/users/test/
В чем ошибся?
><VirtualHost www.poo.ru:80>1. М.б. <VirtualHost *> ?
2. Включай
RewriteLog /var/log/apache/rewrite.log
RewriteLogLevel 9
и смотри.(только что проверил - заработало сразу).
>><VirtualHost www.poo.ru:80>
>
>1. М.б. <VirtualHost *> ?А если у меня не один домен в конфигах, сервер поймет такую строчку
применительно только к poo.ru ?
>>><VirtualHost www.poo.ru:80>
>>
>>1. М.б. <VirtualHost *> ?
>
>А если у меня не один домен в конфигах, сервер поймет такую
>строчку
>применительно только к poo.ru ?Проблемы м.б. только если у тебя помимо name-based виртуальных серверов еще и виртуальные сервера на разных IP сидят.
>><VirtualHost www.poo.ru:80>
>
>1. М.б. <VirtualHost *> ?
>2. Включай
> RewriteLog /var/log/apache/rewrite.log
> RewriteLogLevel 9
>и смотри.
>
>(только что проверил - заработало сразу).
Вот что в логах:[www.test.poo.ru/sid#81d4a78][rid#9738f90/subreq] (2) init rewrite engine with requested uri /index.php
213.252.112.151 - - [15/жЕЧ/2004:18:38:05 +0300] [www.test.poo.ru/sid#81d4a78][rid#9738f90/subreq] (3) applying pattern '^(.+)' to uri '/index.php'
213.252.112.151 - - [15/жЕЧ/2004:18:38:05 +0300] [www.test.poo.ru/sid#81d4a78][rid#9738f90/subreq] (4) RewriteCond: input='%(HTTP_HOST)' pattern='^www\.[^.]+\.poo\.ru$' => not-matched
213.252.112.151 - - [15/жЕЧ/2004:18:38:05 +0300] [www.test.poo.ru/sid#81d4a78][rid#9738f90/subreq] (1) pass through /index.php
213.252.112.151 - - [15/жЕЧ/2004:18:38:05 +0300]
>213.252.112.151 - - [15/жЕЧ/2004:18:38:05 +0300] [www.test.poo.ru/sid#81d4a78][rid#9738f90/subreq] (4) RewriteCond: input='%(HTTP_HOST)' pattern='^www\.[^.]+\.poo\.ru$' => not-matchedВот в этой строчке уже ошибка. Должно быть
... input='www.test.poo.ru' ...
Ты случаем в строчке
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.poo\.ru$
круглые скобки вместо фигурных не написал?
Строчку
RewriteRule ^www\.([^.]+)\.poo\.ru(.*) /home/design/poo/users/$1$2mod_rewrite интерпретирует не так, как ты ожидаешь.
Судя по всему, правила regexp он понимает всего лишь БАЗОВЫЕ, т.е. [^.] не проканает.