2

I need to do the following: My current address looks like: https://www.domain.com

I want to redirect with htaccess: www.domain.com TO https://www.domain.com and http://domain.com TO https://www.domain.com

I've tried with some suggestions here, but it ended up with the endless loop. I tried:

RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www.domain.com [NC] RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]

Any help would be appreciated.

UPDATE: I think I've done it with the following:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L] 

Is that the right way to do it?

4 Answers 4

3

You can achieve both redirect in a single rule like this:

RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.yourdomain.com%{REQUEST_URI} [R=301,L,NE] 
Sign up to request clarification or add additional context in comments.

2 Comments

May I know why you removed acceptance after so many months? btw the other answer doesn't handle this case http://www.domain.com => https://www.domain.com and has many rules that are not even asked in question
I have a requirement described at this quetion stackoverflow.com/questions/38645119/…. Using your answer I was able to achieve some of the redirects but not all. Could you provide your inputs
1

You should have a ! infront of your domain name condition:

### Redirect non-www => www ### RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC] RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 

Because you want to say, do the next rule, if this condition matches... and the condition should be host does NOT match what you want.

If i mix this with techniques i have seen and used before, you could try this:

### Redirect non-www => www ### RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC] RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] # redirect urls with index.html to folder RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index.html HTTP/ RewriteRule ^(([^/]+/)*)index.html$ https://%{HTTP_HOST}/$1 [R=301,L] # change // to / RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)//(.*) HTTP/ [NC] RewriteRule ^.*$ https://%{HTTP_HOST}/%1/%2 [R=301,L] 

Comments

1

The best way is:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

With using %{HTTP_HOST} you don't need to write domain name

Comments

0

Both nonWWW to WWW and http to https solutions:

## Redirecting HTTP to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ## Redirecting non WWW to WWW RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.tld$ [NC] RewriteRule ^(.*)$ http://www.domain.tld/$1 [R=301,L] 

Comments