Dealing with non-hardcoded domain names with mod_rewrite
I am migrating my application which provides a subsite for each user from domain.com/~user to user.domain.com. In order to do this, I wrote the following RewriteRule
:
RewriteRule ^~([a-z_]+)(/.*)?$ http://$1.%{HTTP_HOST}$2 [R=301,QSA,NC]
However, %{HTTP_HOST}
doesn't do exactly what I need it to, because if for instance a user browses to www.domain.com/~user
, it'll redirect to user.www.domain.com
which is obviously not what I'm looking for.
I know that I can replace %{HTTP_HOST}
with a hardcoded domain, but I don't want to do this either, because I will be rolling out the changes on mul开发者_如何学JAVAtiple domains and don't want to have to customize it for each one. Is there a better way to make a singular change without hardcoding? (Furthermore, what if the base domain already has a subdomain -- ie. sub.domain.com/~user
-> user.sub.domain.com
)
Try it with this additional RewriteCond
:
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
RewriteRule ^~([a-z_]+)(/.*)?$ http://$1.%2$2 [R=301,QSA,NC]
This will remove the www.
prefix from the host if present.
精彩评论