Search code examples
.htaccesshttp-redirecthttp-status-code-301virtualhost

How to redirect directory to sub-domain, and www sub-domain to non-www sub-domain?


NOTE: Using <VirtualHost> parameter only.

How do I redirect a directory (say example.com/groups/) to a sub-domain (say groups.example.com), and also the www of that sub-domain (www.groups.example.com) to the non-www URL of that sub-domain (groups.example.com)?


Precisely (⇒ stands for 'should 301 redirect to'):

example.com/groups/groups.example.com

www.groups.example.comgroups.example.com


I have read that using <VirtualHost> is better than all those redirection rules that are usually used (i.e. that using redirection engine is pretty heavy on disk i/o). So, I would like to have the above problem solved using <VirtualHost> in .htaccess / httpd.conf if possible. Thanks!


Solution

  • Something like this should work

    <VirtualHost *:80>
        ServerName example.com 
        ServerAlias groups.example.com www.groups.example.com
    
        RewriteEngine on
        # example.com/groups/ -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^example\.com$
        RewriteRule ^/(\w+)/?$  http://$1.example.com [R=301,L]
    
        # www.groups.example.com -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^www\.(\w+)\.example\.com$
        RewriteRule ^/(.*)$ http://%1.example.com/$1 [R=301,L]
    </VirtualHost>
    

    or specifically for groups

    <VirtualHost *:80>
        ServerName example.com 
        ServerAlias groups.example.com www.groups.example.com
    
        RewriteEngine on
        # example.com/groups/ -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^example\.com$
        RewriteRule ^/groups/?$  http://groups.example.com [R=301,L]
    
        # www.groups.example.com -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^www\.groups\.example\.com$
        RewriteRule ^/(.*)$ http://groups.example.com/$1 [R=301,L]
    </VirtualHost>