.htaccess: Subdomain & PHP-ErrorDocument
Vor kurzem bin ich zu einem neuen Hosting-Provider umgezogen. Seit dem bastl i an der Einrichtung meiner Seite (wie man, zum Beispiel am falsch-kollatierten Portieren der WP-Datenbank, erkennen kann mit Hürden). I bin ein kleiner Ordnungsfreak, deswegen mag’ i meine Verzeichnisse gern sauber. Und um die URLs kurz und permanent zu halten, mag i Subdomains. So. Klingt guat.
Dann will i allerdings auch schöne eigene ErrorDocuments (zum Beispiel so: 403 – Forbidden), damit das alles a bissl a GESICHT hat. Das Problem kommt erst beim Mischen auf. Subdomains und eigene ErrorDocuments. A erster Blick in die .htaccess:
-
ErrorDocument 403 /errorpage.php?sc=403
-
RewriteEngine On
-
# don't rewrite existing directories RewriteCond
-
RewriteCond %{REQUEST_URI} !-d
-
# don't rewrite existing files
-
RewriteCond %{REQUEST_URI} !-f
-
# map 3-digit-files to errordoc
-
RewriteRule ^([4-5][0-9]{2}).(.*)$ errorpage.php?sc=$1
Nach dem ErrorDocument XXX /errorpage?sc=XXX Muster san die “üblichen” Fehler 400, 401, 404 und 500 (obwohl i net sicher bin, ob’s bei dem was bringt – oba bitte, moi schaun) in ein zentrales PHP-File kanalisiert, das sich dann um Weiteres kümmert. Die nächsten 4 Zeilen fangen eventuelle weitere Fehlercodes ab. Des funktioniert, weil die ErrorDocument – Direktive wichtiger is als die Rewrite-Gschichte, zumindest nach der aktuellen Konfiguration auf dem Server hier.
So weit, so gut. Und funktioniert auch wunderbar. Nur net für Subdomains. Der Grund is, wenn ma ihn daun endlich rausgfunden hat, relativ einfach: Die Serverkonfiguration setzt für jede Subdomain ein eigenes DocumentRoot. Die .htaccess-Direktiven werdn daun zwar übernommen, funktionieren aber net, weil’s im neuen DocRoot die /errorpage.php net gibt. Absolute Pfade (/home/username/www) funktionieren auch net, warum is ma net 100% klar, aber auch net sonderlich wichtig; Es geht jo net.
Und wos tuan?
Die Lösung is zwar einfach, aber a bissl mühsam. Wie auch immer, sie funktioniert. Der Clou: Man richte die Subdomains auf die Hauptdomain, damit sie das gleiche DocRoot verwendet. In der zentralen .htaccess werden die Subdomains dann auf das jeweilige Verzeichnis umgeleitet, und siehe da: Die Subdomains funktionieren, die ErrorDocuments funktionieren, es gibt nur mehr 1 zentrales DocumentRoot (= kein automatisches Erstellen der Default-Dateien in den Subdomain-DocRoots) und überhaupt is alles so, wie i ma des vorstell. Die .htaccess-Direktiven für eine Subdomain test:
-
RewriteCond %{HTTP_HOST} ^(www.)?test.domain.com$
-
RewriteCond %{REQUEST_URI} !^/my/demo/folder/
-
RewriteCond %{REQUEST_FILENAME} !-f
-
RewriteCond %{REQUEST_FILENAME} !-d
-
RewriteRule ^(.*)$ /my/demo/folder/$1
-
RewriteCond %{HTTP_HOST} ^(www.)?test.domain.com$
-
RewriteRule ^(/)?$ my/demo/folder/ [L]
NEEEEEERD °!!!!
Da fragt man sich beim Lesen von blog.kno.at ja schon, ob man selbst doof ist. Herzlichen Dank fur Ihre Erlauterungen