.htaccess - redirect non www to www and retain subdomains from redirecting

16,030

Solution 1

You can exclude each sub1, sub2 individually like so;

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} ^sub1\.domain\.com [NC]
RewriteRule ^(.*) - [L]

RewriteCond %{HTTP_HOST} ^sub2\.domain\.com [NC]
RewriteRule ^(.*) - [L]

RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>

Or just be specific that you only want to redirect domain.com to www.domain.com with the RewriteCond

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>

Solution 2

RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

This works for all domains, excluding any subdomains. have fun.

Share:
16,030

Related videos on Youtube

RhymeGuy
Author by

RhymeGuy

Updated on September 18, 2022

Comments

  • RhymeGuy
    RhymeGuy over 1 year

    So, on my main domain 'domain.com' I created several subdomains from cPanel, like 'sub1.domain.com' and 'sub2.domain.com'. Their real location on server is in 'domain.com/sub1' and 'domain.com/sub2'.

    Now, I want to redirect non www to www with .htaccess and this is what currently what i have:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
    RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
    </IfModule>
    

    This works. When somebody enter domain.com it will be redirected to www.domain.com. However when somebody enter sub1.domain.com, he will be redirected to www.domain.com/sub1 - which I don't want, it needs to be in sub1.domain.com.

    What shall I add in .htaccess file to accomplish this?

  • Admin
    Admin almost 2 years
    Its worked for me. for me I have to stop my subdomains from redirecting with www. After adding the RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC] its worked. thanks