Я не хочу сейчас переделывать правила, по этому раскажу, как сделал бы я:
RewriteCond %{HTTP_HOST} ^(.+)$
RewriteRule ^/(.+)$ /%1/$1 [P,L]
Увы, но ваш пример не работает совсем.
А именно всегда отдается файл из public_html.
Покрайней мере у меня :
#TST
RewriteCond %{HTTP_HOST} ^(.+\.working.server)$
RewriteRule ^/(.+)$ /%1/$1 [P,L]
me:~/$ telnet working.server 80
Trying 89.108.68.10...
Connected to vsem.ru.
Escape character is '^]'.
GET http://lalala.working.server/opa/popa/trampampam HTTP/1.1
host: lalala.working.server
HTTP/1.1 404 Not Found
Date: Mon, 09 Oct 2006 08:35:00 GMT
Server: Apache/1.3.33 (Unix) mod_backhand/1.2.2 mod_accel/1.0.31
Content-Type: text/html; charset=iso-8859-1
Transfer-Encoding: chunked
124
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL /lalala.working.server/opa/popa/trampampam was not
found on this server.<P>
<HR>
<ADDRESS>Apache/1.3.33 Server at a2 Port 80</ADDRESS>
</BODY></HTML>
^D
Тоесть таки работает.
Может быть в вашей конфигурации запрос попадает не в тот виртуал хост ?
Я использую апач в котором есть вот такой виртхост:
<VirtualHost *>
ServerName working.server
ServerAlias *
#Here rewrite rules.
</VirtualHost>
Идея в том, что в этот виртхост попадают все запросы, для которых
виртхост не был найден ранее.
Сдесь используется хак. Апач таблицу виртхостов создаёт по порядку
нахождения их в конфиге.
И cоответственно проверяет запрос на принаджлежность виртхосту он тоже
по порядку.
И виртхост с ServerAlias * должен стоять последним.
PS. Речь идёт о apache13 - для второго апача не проверял.
--
Ivan B. Serezhkin