Domain Verzeichnisschutz für Multi-Domain Seiten
In diesem Artikel zeige ich wie man den .htaccess Domain Verzeichnisschutz auf eine bestimmte Domain einschränken kann. Das ist immer dann erforderlich, wenn man eine Mulit-Domain Seite gehostet hat. Mehrere Domains zeigen dabei auf den selben Webspace und verwenden ein und die selbe Webapplikation. Wie man einen einfachen Verzeichnisschutz erstellt habe ich bereits gezeigt und auch wie man Ausnahmen (IP Adressen und URLs) dafür erstellt.
Domain Verzeichnisschutz für nur eine Domain
Die meisten Seiten im Internet sind über eine einzige Domain erreichbar. Es gibt aber auch den anderen Fall, mehrere Domains zeigen auf den selben Webspace, den selben Server beziehungsweise auf die selbe IP Adresse. Unter unterschiedliche Domains wird ein und die selbe Webapplikation aufgerufen.
Beispiele
Ein konkretes Beispiel ist ein Magento Webshop. Magento ist dafür bekannt, dass man auf einer Architektur mehrere Shops betreiben kann. Diese können neben unterschiedlichen Designs auch komplett unterschiedliche Produkte haben. Es ist somit möglich mit einer Applikation und einer dahinter liegenden Datenbank mehrere thematisch völlig unterschiedlicher Shops zu hosten. Dementsprechend würden die Domains auch unterschiedlich sein.
Neben dem e-Commerce Beispiel gibt es auch zahlreiche andere Applikationen wie Magazinseiten oder Blogs die ausgehend von einer Datenbasis unterschiedliche Webseiten und Domains darstellen können.
.htaccess
Ist nun eine Zugriffsbeschränkung durch .htaccess notwendig, dann steht man vor dem Problem, dass man für alle unterschiedlichen Domains nur eine einzige .htaccess hat. In der kann man sehr einfach einen globalen Verzeichnisschutz erstellen der für alle Domains gültig ist. Mit etwas zusätzlichen Aufwand aber auch nur für bestimmte Domains.
In meinem Beispiel gehe ich davon aus, dass mehrere Domains wie domain.com, domain1.com, … usw. auf den gleichen Webspace zeigen. Die unterschiedliche Darstellung der Seite wird durch die Webapplikation realisiert. Für die Domain restricted-domain.com alleine soll ein Domain Verzeichnisschutz eingerichtet werden. Das geht so:
SetEnvIf HOST ^.*restricted-domain.com.* require_auth=true AuthUserFile /var/www/.htpasswd AuthType Basic AuthName "Passwortschutz" Require valid-user Order deny,allow Deny from all Satisfy any Allow from env!=require_auth
In der .htaccess Datei wird am Ende dieser Code hinzugefügt. Bitte beachte, dass die .htpasswd Datei mit den zugehörigen Login Informationen erstellt werden muss.
Über die HOST Variable bekommt man die Base URL, also die Domain der Seite. Diese vergleichen wir mit einem String – wir geben über einen Regulären Ausdruck an, dass innerhalb der Domain auch alle Subdomains, also alle Zeichen vor der Domain ^.* und alle Zeichen nach der Domain .* akzeptiert werden. Die Variable require_auth wird in dem Fall auf true gesetzt. In der Allow from Klausel erlauben wir dann allen Seiten den Zugriff außer der restricted-domain Seite bei der wir den Verzeichnisschutz anzeigen.
Fazit
In einer .htaccess Datei kann man recht komplexe Regeln unter anderem auch für den Domain Verzeichnisschutz erstellen. Einmal erstellt funktioniert das auch wunderbar. Der große Nachteil an einer .htaccess Konfiguration ist, dass man Fehler nicht debuggen kann. Hat man einen Tippfehler oder einen logischen Denkfehler, so muss man oft recht lange danach suchen. Entweder funktioniert der Verzeichnisschutz nicht wie gewünscht oder man endet in einem Serverfehler.
Das funktioniert aber nur in Apache und Cherokee.
ja das ist korrekt
Wie sähe der HOST bei einer Sub-Domain aus?
Ich denke es sollte reichen die eine Zeile auszubessern:
SetEnvIf HOST ^.*subdomain.restricted-domain.com.* require_auth=true
Mangels Subdomains habe ich das aber nicht getestet.