Differences between revisions 12 and 13
Revision 12 as of 2011-06-02 15:27:15
Size: 1724
Editor: DenisHowe
Comment:
Revision 13 as of 2012-10-31 16:52:46
Size: 1726
Editor: TBille
Comment: Fix leading slash problem, which i encountered using the example on debian lenny / 2.2
Deletions are marked like this. Additions are marked like this.
Line 37: Line 37:
RewriteRule ^/(.*) http://example.com:%{SERVER_PORT}/$1 [L,R=301] RewriteRule ^/?(.*) http://example.com:%{SERVER_PORT}/$1 [L,R=301]
Line 42: Line 42:
RewriteRule ^/(.*) http://example.com/$1 [L,R=301] RewriteRule ^/?(.*) http://example.com/$1 [L,R=301]

Canonical HostNames

Many sites map a variety of hostnames to the same content. For example, example.com, www.example.com and www.example.net may all refer to the same site. It is best to make sure that, regardless of the name clients use to access the site, they will be redirected to a single, canonical hostname, preferably without "www.". This makes the site easier to maintain and assures that there will be only one version of the site in proxy caches and search engines.

Using Virtual Hosts

Use the Redirect directive inside a VirtualHost block to force browsers to redo a request with a new host name.

Remember that the first listed VirtualHost will serve all requests that match no ServerName or ServerAlias. By using a Redirect in this host, you can assure that any non-matched names will also be transferred to the Canonical host.

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.example.net
  ServerAlias www.example.com
  Redirect permanent / http://example.com/
</VirtualHost>

<VirtualHost *:80>
  # Canonical host
  ServerName example.com
  DocumentRoot /usr/local/apache/htdocs
</VirtualHost>

Using mod_rewrite

# For sites running on a port other than 80
RewriteCond %{HTTP_HOST}   !^example\.com [NC]
RewriteCond %{HTTP_HOST}   !=""
RewriteCond %{SERVER_PORT} !=80
RewriteRule ^/?(.*)         http://example.com:%{SERVER_PORT}/$1 [L,R=301]

# And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^example\.com [NC]
RewriteCond %{HTTP_HOST}   !=""
RewriteRule ^/?(.*)         http://example.com/$1 [L,R=301]

CanonicalHostNames (last edited 2012-10-31 16:52:46 by TBille)