apache.htaccess

.htaccess redirect HTTP to HTTPS


I have an old domain (www1.example.net) and I would like to redirect it to https://www1.example.net.

I have implemented and installed our SSL certificate on my site.

This is my old file .htaccess:

RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

How can I configure my .htaccess file so that the URL auto redirects to https?


Solution

  • Update 2016

    As this answer receives some attention, I want to hint to a more recommended way on doing this using Virtual Hosts: Apache: Redirect SSL

    <VirtualHost *:80>
       ServerName mysite.example.com
       Redirect permanent / https://mysite.example.com/
    </VirtualHost>
    
    <VirtualHost _default_:443>
       ServerName mysite.example.com
       DocumentRoot /usr/local/apache2/htdocs
       SSLEngine On
    # etc...
    </VirtualHost>
    

    Old answer, hacky thing given that your ssl-port is not set to 80, this will work:

    RewriteEngine on
    
    # force ssl
    RewriteCond     %{SERVER_PORT} ^80$
    RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    

    Note that this should be your first rewrite rule.

    Edit: This code does the following. The RewriteCond(ition) checks wether the ServerPort of the request is 80 (which is the default http-port, if you specified another port, you would have to adjust the condition to it). If so, we match the whole url (.*) and redirect it to a https-url. %{SERVER_NAME} may be replaced with a specific url, but this way you don't have to alter the code for other projects. %{REQUEST_URI} is the portion of the url after the TLD (top-level-domain), so you will be redirected to where you came from, but as https.