apache redirect http to https and www to non www

36,579

Solution 1

You can get what you need from the HTTP_HOST

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

This way it will get the host always without the subdomain.

Solution 2

You will have to re-issue your certificate for both www and without www.

If someone connects to your site via a domain name that is not included in your common name, they will receive a warning.

The ssl negociation process happens before any response from the server (in your case, a redirection), so in all cases, your visitors will receive a warning when using a domain that is not in your common name.

Solution 3

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

Solution 4

If you are using CloudFlare's free account then that's the problem. CloudFlare's free account does NOT support SSL Certificates. To continue using CloudFlare's free account with an SSL Certificate just go to the DNS settings in CloudFlare and take the orange cloud off of your domain and off of the cname WWW. That will fix your problem and cause both www and non-www to be redirected to https.

Also be sure to add this code to your .htaccess file:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Then, everything should work!

Share:
36,579

Related videos on Youtube

misulicus
Author by

misulicus

Updated on December 12, 2021

Comments

  • misulicus
    misulicus over 2 years

    basically what i want is redirect al request to use HTTPS instead of http

    I have this in my htaccess so far and it worked great: Code:

    <IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
    </ifModule> 
    

    today someone noticed that when going to: http://www.example.com it redirects to and shows an unsecure connection thingie.

    My ssl is setup for non www domain: mydomain.com

    So i need to make sure all site requests are sent to non www and https: It works fine if i put example.com it redirects to https://example.com

    but with www.example.com it goes to htts://www.example.com and shows the error

    what do i need to add to my code to redirect www to non www and then to ssl ?

    • Pierre-Olivier
      Pierre-Olivier about 12 years
      What common names are in your certificate ? Most CAs put www and non-www in the common name when they issue a certificate for avoiding this kind of issue.
    • misulicus
      misulicus about 12 years
      certificat is made for domain.com (non www) basically i want all trafic to go to NON www and https
  • anubhava
    anubhava about 12 years
    +1 but you should really change RewriteRule line to: RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
  • Pierre-Olivier
    Pierre-Olivier about 12 years
    I don't think this answer will solve OP's issue concerning visitors receiving a warning, though.
  • Pierre-Olivier
    Pierre-Olivier about 12 years
    @baynezy code will only redirect non-ssl connections. This does not solve your issue about redirecting https://www.mysite.com to https://mysite.com or visitors receiving a warning when visiting https://www.mysite.com
  • misulicus
    misulicus about 12 years
    @Pierre-OlivierBourgeois truee but no one will type https:// www. most will put just www.domain.com and that now redirects to https://
  • Francis P
    Francis P about 12 years
    does not solve the https://www.mysite.com redirection to https://mysite.com issue
  • bryan
    bryan over 9 years
    I've searched for hours and this is the only answer that has worked. Keep in mind that the above comments are right though. This will work for almost every instance except if they start with https://www. and not http://www
  • Donald Duck
    Donald Duck over 7 years
    While this code may answer the question, providing additional context regarding why and/or how this code answers the question improves its long-term value.
  • ezwrighter
    ezwrighter about 5 years
    Your answer should be marked as the correct one, but I also must note that currently, Chrome does handle 301 redirects before the certificate is validated with no warning to the user, while Safari does not. The universal way is to do it as you explain.