Kanonische Domainnamen mit Apache unter Debian

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

Dieses Dokument ist unter einer Creative Commons-Lizenz lizenziert.

Dokument wurde zuletzt am Samstag den 16. Janur 2010 um 21:25 Uhr aktualisiert.