Vertipper bei Subdomains

Da die meisten schönen Domains bereits einen Besitzer haben, arbeite ich gerne mit Subdomains um sprechende Adressen a la del.icio.us zu bekommen. Leider vertippen sich die Nutzer gerne, daher müssen diese Fehler (manchmal ist es auch Faulheit) abgefangen werden.

Beispiel anhand eines Forums: mons.trum.eu

Alle Möglichen Kombinationen unterhalb von trum.eu sollen auf mons.trum.eu umgeleitet werden. Voraussetzung ist allerdings, dass alle potentiellen Subdomains in der httpd.conf zugewiesen wurden. Bei Standard-Angeboten der Hoster findet sich meist eine Datei httpd.include. Dort ist sinngemäß folgender Eintrag zu finden:

<VirtualHost 85.214.39.237:80>
ServerName trum.eu:80
ServerAlias www.trum.eu

Am ServerName würde ich nichts ändern, das bringt eventuell die Konfiguration des Hosters durcheinander. Kein Problem hingegen ist die Änderung des ServerAlias von www.trum.eu auf *.trum.eu.

Dann genügen drei Zeilen in der .htacces-Datei und schon haben wir das gewünschte Ergebnis:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(.*)mons\.trum\.eu$
RewriteRule ^(.*)$ http://mons.trum.eu/$1 [L,R=301]

Viel Spass bei Sub-Domaining.

Weitere Artikel zu den Stichworten , , ,

Wenn Sie eine eigene Meinung dazu haben, schreiben Sie doch einen Kommentar. Oder vielleicht möchten Sie aktuell über neue Beiträge informiert werden, dann abonnieren Sie doch den Feed.

Kommentare

Verkauf doch Yahoo mal ein paar Beratungsstunden. Bei del.icio.us laufen Vertipper ins Leere. Y! wie gewohnt zielstrebig 2.klassig.

Das ist ja soweit ganz nett wenn man nur eine einzige Domain damit “versorgen” will. Wie schaut es dann aber aus wenn man mehrere Subdomains hat?

@Thomas Ich schreibe heute darüber, versprochen.

.htaccess und eigentliche Serverkonfiguration (hier: httpd.include) haben die gleiche Funktionalität, der Unterschied besteht lediglich im Umfang der Rechte und dem Ladezeitpunkt.

Es ist deshalb unnötig, um nicht zu sagen kontraproduktiv, diese Rewrite-Optionen in die .htaccess zu schieben. Die .htaccess-Dateien müssen bei jeder einzelnen Anfrage neu geladen werden, das macht aber herzlich wenig Sinn bei einer sich nie ändernden Option und frisst nur unnütz Resourcen - deshalb gehört die “www-Umleitung” so irgend möglich nicht in die .htaccess, sondern in den betreffenden -Block, wo sie nur einmal, beim Serverstart, eingelesen und verwurstet werden muss.

Davon abgesehen ist die Zeile RewriteCond %{HTTP_HOST} !^(.*)mons\.trum\.eu$ in Verbindung mit der Weiterleitung nach mons.trum.eu falsch; sie besagt, dass alles, was nicht (!) auf mons.trum.eu endet (^.*mons\.trum\.eu$), weitergeleitet werden soll - das ist aber nicht Sinn der Sache, es soll vielmehr alles weitergeleitet werden, was nicht mons.trum.eu ist. Und die runden Klammern sind eh überflüssig, es wird weder gruppiert noch abgegriffen.

So ist’s ordentlich:

ServerName trum.eu
ServerAlias *.trum.eu
RewriteEngine on
RewriteCond %{HTTP_HOST} !^mons\.trum\.eu$
RewriteRule ^/(.*)$ http://mons.trum.eu/1 [L,R=301]

(Man beachte den führenden Schrägstrich im RewriteRule-Muster, er ist hier, anders als in der .htaccess, notwendig.)

Noch schlauer, weil noch weniger Resourcen fressend (jedoch nur für die einfache www-Weiterleitung geeignet):

ServerName example.com
Blafasel …

ServerName http://www.example.com
Redirect permanent / http://example.com/

Das Kommentarskript hier ist der letzte Müll, es frisst nicht nur spitze Klammern, sondern klebt auch noch ungefragt vor Domains “http://” - wie schwachsinnig ist das denn … :(

( ist eine öffnende spitze Klammer, ) eine schließende:

(VirtualHost 1.2.3.4:80)
ServerName example.com
Blafasel …
(/VirtualHost 1.2.3.4:80)

(VirtualHost 1.2.3.4:80)
ServerName www .example.com
Redirect permanent / http://example.com/
(/VirtualHost 1.2.3.4:80)

Hi Onkel Hotte,

danke für die Hinweise.

Die Trennung von conf und .htaccess habe ich bewusst vorgenommen, da die meisten Leute keinen Zugriff auf die conf haben und den Provider bemühen müssen, der aber nicht unbedingt erfreut ist jedesmal darin rumzuwuseln. Daher das was sich eventuel öfter ändern könnte (bei neuen Subdomains beispielsweise) in die .htaccess.

Gut, über die Gruppierung mit runden Klammern kann man sich streiten, aber zu sagen meine Lösung wäre falsch, halte ich schon ein bisserl für daneben. Ist Deine Version performanter? Das Ergebnis ist bei beiden Lösungen identisch, wie so oft in der EDV.

Grüße

Matthias

Jetzt weiss ich auch wieder warum ich es genau so gemacht habe, wegen einer geplanten zweiten Subdomain!

zen.trum.eu

Ich schrieb nicht, dass die Lösung insgesamt falsch wäre, auch nicht, dass sie wegen der Klammern oder der Leistung falsch wäre.
Es geht einzig um das Muster !^(.*)mons\.trum\.eu$. Du schreibst, dass “Alle Möglichen Kombinationen unterhalb von trum.eu sollen auf mons.trum.eu umgeleitet werden” sollen, das ist mit deinem Muster nicht möglich. Beispielsweise die von dir angeführte Domain http://www.mons.trum.eu leitest du damit nicht weiter, denn sie passt auf das Muster, und die Weiterleitung erfolgt nur, wenn sie _nicht_ passt (wegen des führenden Ausrufezeichens).
Bei qqq.www.1.trum.eu, mon.trum.eu oder zen.trum.eu würde es hingegen die Weiterleitung nach mons.trum.eu geben.

Ob man nun Subdomains im gleichen Verzeichnis wie die Hauptdomain lagern muss, wie du es anscheinend mit zen.trum.eu vorhast, ist vermutlich Geschmackssache. Ich lege dafür üblicherweise einen eigenständigen Host an, daher auch mein Hinweis, den sich nie ändernden Rewrite-Block nicht in der .htaccess zu lagern.

Peinlicher Fehler, ich gebe es zu. Im Laufe des Wochenendes ändere ich den Beitrag. So soll es eigentich auch sein, Kommunikation via Blog. Dankeschön!

Einen Kommentar schreiben

(required)

(required)


Hinweis: Für Kommentare mit eindeutig werblichen Inhalt werden ggf. 500 EUR,- (zzgl. der gültigen MwSt.) in Rechnung gestellt.

Geschützt durch SpamBam
(231805 Spamkommentare gefiltert)