Generic htaccess redirect www to non-www

.HtaccessRedirectMod RewriteUrl RewritingHttp Status-Code-301

.Htaccess Problem Overview


I would like to redirect www.example.com to example.com. The following htaccess code makes this happen:

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

But, is there a way to do this in a generic fashion without hardcoding the domain name?

.Htaccess Solutions


Solution 1 - .Htaccess

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

Same as Michael's except this one works :P

Solution 2 - .Htaccess

But if we need to do this for separate http and https:

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

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

Solution 3 - .Htaccess

Redirect non-www to www (both: http + https)

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

Solution 4 - .Htaccess

If you want to do this in the httpd.conf file, you can do it without mod_rewrite (and apparently it's better for performance).

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

I got that answer here: https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507

Solution 5 - .Htaccess

Here are the rules to redirect a www URL to no-www:

#########################
# redirect www to no-www
#########################

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]

Here are the rules to redirect a no-www URL to www:

#########################
# redirect no-www to www
#########################

RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]

Note that I used NE flag to prevent apache from escaping the query string. Without this flag, apache will change the requested URL http://www.example.com/?foo%20bar to http://www.example.com/?foo%2250bar

Solution 6 - .Htaccess

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R]

The RewriteCond captures everything in the HTTP_HOST variable after the www. and saves it in %1.

The RewriteRule captures the URL without the leading / and saves it in $1.

Solution 7 - .Htaccess

Try this:

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C]
RewriteRule ^www\.(.*)$ http://$1 [L,R=301]

If the host starts with www, we stick the whole host onto the start of the URL, then take off the "www."

Solution 8 - .Htaccess

Complete Generic WWW handler, http/https

I didn't see a complete answer. I use this to handle WWW inclusion.

  1. Generic. Doesn't require domain info.
  2. Forces WWW on primary domain: www.domain.com
  3. Removes WWW on subdomains: sub.domain.com
  4. Preserves HTTP/HTTPS status.
  5. Allows individual cookies for domain / sub-domains

Please let me know how this works or if I left a loophole.

RewriteEngine On
RewriteBase /

# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove WWW. when subdomain(s) in host     
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]

Solution 9 - .Htaccess

There can be a lot of misinformation out there about htaccess redirects, I find. First off, make sure your site is running on Unix using Apache and not on a Windows host if you expect this code to work.

RewriteEngine On

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

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(Make sure there are no line spaces between each line of text, though; I have added an extra space between lines so it renders okay in this window.)

This is one snippet of code that can be used to direct the www version of your site to the http:// version. There are other similar codes that can be used, too.

Solution 10 - .Htaccess

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]

For subfolder

Solution 11 - .Htaccess

www to non www with https

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Solution 12 - .Htaccess

For those that need to able to access the entire site WITHOUT the 'www' prefix.

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

Mare sure you add this to the following file

/site/location/.htaccess 

Solution 13 - .Htaccess

Using .htaccess to Redirect to www or non-www:

Simply put the following lines of code into your main, root .htaccess file. In both cases, just change out domain.com to your own hostname.

Redirect to www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
  RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301]
</IfModule>

Redirect to non-www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC]
  RewriteRule ^(.*)$ http://domain.tld/$1 [L,R=301]
</IfModule>

Solution 14 - .Htaccess

I used the above rule to fwd www to no www and it works fine for the homepage, however on the internal pages they are forwarding to /index.php

I found this other rule in my .htaccess file which is causing this but not sure what to do about it. Any suggestions would be great:

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

Solution 15 - .Htaccess

RewriteEngine on
# if host value starts with "www."
RewriteCond %{HTTP_HOST} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]

If you want to remove www on both http and https , use the following :

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]

This redirects Non ssl

to

And SSL

to

on apache 2.4.* you can accomplish this using a Redirect with if directive,

<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>

Solution 16 - .Htaccess

use: Javascript / jQuery

// similar behavior as an HTTP redirect
window.location.replace("http://www.stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";

Or .htaccess:

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

and The PHP method:

$protocol = (@$_SERVER["HTTPS"]    == "on") ? "https://" : "http://";

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') {
    header('Location: '.$protocol.'www.'.$_SERVER    ['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']);
    exit;
}

Ajax

$.ajax({
    type: "POST",
    url: reqUrl,
    data: reqBody,
    dataType: "json",
    success: function(data, textStatus) {
        if (data.redirect) {
            // data.redirect contains the string URL to redirect to
            window.location.href = data.redirect;
        }
        else {
            // data.form contains the HTML for the replacement form
            $("#myform").replaceWith(data.form);
        }
    }
});

Solution 17 - .Htaccess

The only way I got it to work...

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ro
RewriteRule (.*) http://www.site.ro/$1 [R=301,L]

Solution 18 - .Htaccess

If you are forcing www. in url or forcing ssl prototcol, then try to use possible variations in htaccess file, such as:

RewriteEngine On
RewriteBase /

Force WWW

RewriteCond %{HTTP_HOST} ^example.com RewriteRule (.*) http://www.example.com/$1 [R=301,L]

Force SSL

RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L]

Block IP's

Order Deny,Allow Deny from 256.251.0.139 Deny from 199.127.0.259

Solution 19 - .Htaccess

This is updated to work on Apache 2.4:

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

The only change vs Michael's is to remove the [NC], which produces the "AH00665" error:

> NoCase option for non-regex pattern '-f' is not supported and will be ignored

Solution 20 - .Htaccess

The selected answer and many other solutions here dropped the the part of the url after /, so basically it always redirected to main domain, at least for me.. So i am adding working sample respecting full path after slash..

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

Solution 21 - .Htaccess

Alternative approach if .htaccess customization is not ideal option:

I've created simple redirect server for public use. Just add A or CNAME record:

CNAME	r.simpleredirect.net
A	    89.221.218.22

More info: https://simpleredirect.net

Solution 22 - .Htaccess

I am not sure why u want to remove www. But reverse version would be:

# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]

And advantage of this script is: if u have something like test.whattimein.com or any other (enviroments for developing/testing) it wont redirect U to the original enviroment.

Solution 23 - .Htaccess

Added if localhost, ignore redirection (for development purpose in local environment). If not localhost AND (not https OR it’s www), redirect to https and non-www.

RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_HOST} !localhost [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Solution 24 - .Htaccess

Hi you can use following rules on your htaccess file:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondeepwellView Question on Stackoverflow
Solution 1 - .HtaccessBenView Answer on Stackoverflow
Solution 2 - .HtaccessAndronView Answer on Stackoverflow
Solution 3 - .HtaccessDmytroView Answer on Stackoverflow
Solution 4 - .HtaccessWilliam DennissView Answer on Stackoverflow
Solution 5 - .HtaccessSalman AView Answer on Stackoverflow
Solution 6 - .HtaccessMichael CramerView Answer on Stackoverflow
Solution 7 - .HtaccessGregView Answer on Stackoverflow
Solution 8 - .HtaccessGregor MacgregorView Answer on Stackoverflow
Solution 9 - .HtaccessHtaccess RedirectView Answer on Stackoverflow
Solution 10 - .HtaccesspelajarView Answer on Stackoverflow
Solution 11 - .HtaccessRajith RamachandranView Answer on Stackoverflow
Solution 12 - .HtaccessRickView Answer on Stackoverflow
Solution 13 - .HtaccessRohallah HatamiView Answer on Stackoverflow
Solution 14 - .HtaccessLukeView Answer on Stackoverflow
Solution 15 - .HtaccessAmit VermaView Answer on Stackoverflow
Solution 16 - .HtaccessUniversal OmegaView Answer on Stackoverflow
Solution 17 - .HtaccesssulfyView Answer on Stackoverflow
Solution 18 - .HtaccessmystiqueView Answer on Stackoverflow
Solution 19 - .HtaccessWilliam EntrikenView Answer on Stackoverflow
Solution 20 - .HtaccesslukyView Answer on Stackoverflow
Solution 21 - .HtaccessBobíkView Answer on Stackoverflow
Solution 22 - .HtaccesslocalView Answer on Stackoverflow
Solution 23 - .HtaccessJeaf GilbertView Answer on Stackoverflow
Solution 24 - .HtaccessChirag ParekhView Answer on Stackoverflow