Apache redirect www to non-www and HTTP to HTTPS

apache-cff

Introduction

Step by Step process to achieve redirect for better SEO performance. How to redirect a site from www to non-www (or viceversa) and from HTTP to HTTPS, using the Apache server configuration. To be more clear, the configuration will redirect the following host names:

http://demosite.com
http://www.demosite.com
https://demosite.com

to

https://demosite.com

Apache Configuration

To configure the redirects, add the following redirect rule code either to the Apache configuration file if you have access to it, or to the .htaccess in the root of your site:

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

How it works (For Better SEO)

RewriteEngine On

The rule enables the Apache runtime rewriting engine, required to perform the redirect. You may have already enabled it in a previous configuration in the same file. If that’s the case, you can skip that line.

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]

These two lines are are the redirect conditions, they are used to determine if the request should be redirected. Because the conditions are joined with an [OR], if any of those two conditions returns true, Apache will execute the rewrite rule (the redirect).

The first condition determines if the request is using a non-HTTPS URL. The second condition determines if the request is using the www URL. Notice that I used www\. and not www., because the pattern is a regular expression and the . dot has a special meaning here, hence it must be escaped.

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]

The forth line is a convenient line I used to avoid referending the hostname directly in the URL. It matches the HOST of the incoming request, and decomposes it into www part (if any), and rest of the hostname. We’ll reference it later with %1 in the RewriteRule.

If you know the host name in advance, you may improve the rule by inlining the URL and skipping this condition (see later).

RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

The RewriteRule is the heart of the redirect. With this line we tell Apache to redirect any request to a new URL, composed by:

  • https://www.
  • %1: the reference to the non-www part of the host
  • %{REQUEST_URI}: the URI of the request, without the hostname

All these tokens are joined together, and represents the final redirect URI. Finally, we append 3 flags:

  • NE to not escape special characters
  • R=301 to use the HTTP 301 redirect status
  • L to stop processing other rules, and redirect immediately

Conclusion

This blog provides a simple configuration to redirect www and non-HTTPS requests to the canonical site domain. This is very useful to avoid content duplication issues with search engines, and offer an improved experience to your users and for better performance in SEO.

Hope this helps.

Happy Coding!!!
Cloud Front Factory

Server Side

Leave a Reply

Your email address will not be published. Required fields are marked *