Kanonische Domainnamen mit Apache unter Debian

Wenn ein Inhalt über mehrere Domains (meist schon mit und ohne www) erreichbar sein soll, wird der dadurch entstandene Duplicate Content von Suchmaschinen negativ bewertet. Hier helfen kanonische Domainnamen. Diese sind ein Teil von kanonischen Urls.

Die „alte“ Methode per mod_rewrite

Die Lösung per mod_rewrite hat den kleinen Schönheitsfehler, dass diese oft nicht korrekt umgesetzt werden und so oft den Pfad oder auch den Query aus der URL bei der Umleitung nicht übernehmen. Auch muss bei Änderungen am VHost die Angaben mit der Umleitung mit angepasst werden – was dann doch leider oft vergessen wird.

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

Redirect-to-ServerName

Die einfachere Methode ist in diesem Fall das Modul libapache2-redirtoservname.

$ aptitude install libapache2-redirtoservname $ a2enmod redir_to_servname

Nachdem das Modul libapache2-redirtoservname installiert und aktiviert wurde, muss noch der entsprechende VHost (in unserem Beispiel example.com) unter /etc/apache2/sites-enabled/example.com konfiguriert werden.

VHost konfigurieren

Zum VHost muss nun nur noch die Angabe RedirectToServerName On hinzugefügt werden.

<VirtualHost *:80>     ServerName example.com     ServerAlias *.example.com     ServerAdmin webmaster@example.com     DocumentRoot /var/www/example.com/htdocs     RedirectToServerName On </VirtualHost>

Abschluss

Zum Abschluss muss noch Apache mit /etc/init.d/apache2 restart neugestartet werden, damit die neuen Einstellungen aktiviert werden.

$ /etc/init.d/apache2 restart Restarting web server: apache2 ... waiting .

Testen

Zum Testen wird das Programm curl mit -I (großes i, für Info) verwendet, um mit eine HTTP-Anfrage die Antwort des Servers zu testen. Der Server sollte dann mit dem Status HTTP/1.1 301 Moved Permanently und die Zeile Location im Header enthalten, die mit der Angabe ServerName aus der VHost-Config identisch ist.

Erster Test

$ curl -I http://www.example.com/ HTTP/1.1 301 Moved Permanently Date: Sat, 16 Jan 2010 19:48:09 GMT Server: Apache/2.2 Location: http://example.com/ Vary: Accept-Encoding Content-Type: text/html; charset=iso-8859-1

URL mit Pfad

Auch ein evtl. vom Benutzer angegebener Pfad in der Url wird korrekt weitergeleitet.

$ curl -I http://www.example.com/foo/bar HTTP/1.1 301 Moved Permanently Date: Sat, 16 Jan 2010 19:48:09 GMT Server: Apache/2.2 Location: http://example.com/foo/bar Vary: Accept-Encoding Content-Type: text/html; charset=iso-8859-1