First SERVER_NAME is apache internal NOT a http header sent with the
request thus will match ANY request. Use HTTP_HOST instead. You also need
to escape the dots in the host name.
Second, from the documentation:
"To combine new and old query strings, use the [QSA] flag."
so by using QSA you are modifying the query string adding another foo to it
thus the result you are seeing.
Finally, your rules should look like:
RewriteCond %{HTTP_HOST} ^foo\.mydomain\.com$ <http://foo.mydomain.com/>
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule /(.*) /foo/$1 [L]
Igor
On Sat, Mar 17, 2012 at 1:40 AM, Nala Gnirut <[email protected]> wrote:
> Hi all,
> in a shared hosting with no access to httpd.conf, I'm trying to redirect
> subdomains to different document root using mod_rewrite.
>
> I'm using this rule in a .htaccess file placed in DocumentRoot:
>
> # Change document root for foo.mydomain.com
> RewriteCond %{SERVER_NAME} foo.mydomain.com
> RewriteCond %{ENV:REDIRECT_STATUS} ^$
> RewriteRule .* /foo%{REQUEST_URI} [QSA,L]
>
> This works as expected accessing
>
> foo.mydomain.com
> foo.mydomain.com/
> foo.mydomain.com/bar/
>
> while
>
> foo.mydomain.com/bar
>
> fails as it's redirected to
>
> /foo/foo/bar instead of /foo/bar
>
> Please note that trailing slashes are automatically added to any rule but
> the ones rewritten by this rule.
>
> Where's my fault?
>
> Thanks in advance.
>
>