Apache NON-WWW Redirection regards to HTTP(s) protocol
With Apache, we can do a 301 redirects from www to a non-www domain (to ensuring only the example.com version is every accessible), using a .htaccess file settings, so first will setting up the HTTP protocol status as a protossl environment variable, like so:
RewriteEngine on
# Set "protossl" to "s" if we were accessed via https://.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]
# Now we can set safe non-www redirection as
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
And so we can re access domain through www record as:
RewriteEngine on
# Set "protossl" to "s" if we were accessed via https://.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Apache HTTP to HTTPS redirection
to make permanent 301 redirection from HTTP to => HTTPS we’ll need to add the following rewrite rule to our .htacess file as:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [L,R=301]
Check Apache mod_rewrite is enabled
Rewrite rules are depending on mod_rewrite Apache module, so if our rules does not works, we’ll need to check if the module is enabled, and enable it if it’s not.
# for Debian/Ubuntu sudo a2enmod rewrite
for Centos/Redhat we’ll check if LoadModule rewrite_module modules/mod_rewrite.so is enabled at httpd.conf file.
and so we can check by listing the enabled modules after reload Apache configs.
# apache2ctl -M or # httpd -M
Nginx NON-WWW and HTTPS redirection
Before the main server directive of your virtual server definition /etc/nginx/conf.d/virtual.conf file, as the following combination…
# Redirect http www to https non-www
server {
listen IP:80;
# listen 80;
server_name www.example.com;
access_log off;
return 301 https://example.com$request_uri;
#return 301 https://$host$request_uri;
}
# Redirect https www to https non-www
server {
listen IP:443;
# listen 443;
server_name example.com;
access_log off;
return 301 https://example.com$request_uri;
#return 301 https://$host$request_uri;
}
# Redirect http no-www to https no-www
server {
listen IP:80 default_server;
# listen [::]:80 default_server;
server_name example.com;
access_log off;
return 301 https://example.com$request_uri;
#return 301 https://$host$request_uri;
}
# So 433 server directive will be the entry server for your website.
server {
listen IP:443 ssl default_server;
#listen [::]:443 ssl default_server;
server_name example.com;
------------------------
------------------------
}


