Take the 2-minute tour ×
Webmasters Stack Exchange is a question and answer site for pro webmasters. It's 100% free, no registration required.

I am aware of the fact that there are tons of questions in this section and in server fault dealing with re-directions from non-www to www URLs. But I couldn't find one dealing with this issue while preserving protocol.

I am no mod-rewrite expert, and my code is just copy/pasted... Here's what I have:

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

So now http://domain.tld and https://domain.tld are forwarded to http://www.domain.tld. How do I make it so that HTTPS stays on HTTPS while HTTP stays on HTTP?

share|improve this question
    
Just for anyone who finds this question... the above mod_rewrite directives look as if they are intended for the server config, as opposed to .htaccess. If this was used in .htaccess then an additional slash is required in the substitution: http://www.domain.tld/$1 –  w3d Nov 30 at 11:24

2 Answers 2

up vote 1 down vote accepted

Just a little information. Best practices indicate that trafic from HTTP has to be redirected to HTTPS. If your site is reachable on HTTPS, no more need to HTTP.

I think you can associate no-www redirection to www with HTTP redirection to HTTPS.

Moreover, be careful of duplicate content if your site is reachable with HTTP and HTTPS.

share|improve this answer

You can use the code you have, just use it again with HTTPS_HOST too (more chars escaped with \ even though it may not be needed in most servers). As w3d noted in a comment above, this is designed to work in a htaccess file because of the / before the $1:

RewriteCond %{HTTP_HOST} ^domain\.tld$
RewriteRule ^(.*)$ "http\:\/\/www\.domain\.tld\/$1" [R=301,L]

RewriteCond %{HTTPS_HOST} ^domain\.tld$
RewriteRule ^(.*)$ "https\:\/\/www\.domain\.tld\/$1" [R=301,L]

Here is the one we use sometimes to cover addon domains situations. Consider most addon domains use a utility subdomain on a host domain, which is often accessible. This would also forward the sub and www-sub:

RewriteCond %{HTTP_HOST} ^domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTP_HOST} ^domain\.tld$
RewriteRule ^(.*)$ "http\:\/\/www\.domain\.tld\/$1" [R=301,L]

RewriteCond %{HTTPS_HOST} ^domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTPS_HOST} ^www\.domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTPS_HOST} ^domain\.tld$
RewriteRule ^(.*)$ "https\:\/\/www\.domain\.tld\/$1" [R=301,L]

There are methods to make these combined as 1 rule-set, but it's nicer IMO to keep them as separated HTTP and HTTPS "routers". You can play with the targets in each if you wanna enforce either-or SSL mode too.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.