.htaccess

Aus Bicowi


Zwei Websites auf einer Domain managen (z.B. alte+neue Website)

Diese Lösung kann man gebrauchen, wenn man z.B. eine neue Website entwickeln will, die jedoch parallel zur aktuell laufenden Website (alte Website) getestet werden soll. Der Ausgangspunkt der Überlegung ist, dass man deshalb im Root-Verzeichnis der Domain 2 Unterverzeichnisse anlegt: /alteseite und /neueseite. In dem Verzeichnis /alteseite ist die aktuell laufende Wesite komplett enthalten und in dem Verzeichnis /neueseite ist der Entwicklungsstand der neuen Website enthalten. Die alte Website soll ganz normal bei Domainzugriff aufgerufen werden, also z.B. www.meinedoamin.de. Die neue Website hingegen soll beim Aufruf von www.meinedoamin.de/neueseite angesprochen werden. Die Besonderheit hierbei ist, dass man unbedingt darauf achten muss Rekursionen zu vermeiden. Damit ist gemeint, dass bei einer Regel, die z.B. sagen würde: Wenn ein Request kommt, der /neueseite enthält, dann leite diese Anfrage nach x.y/neueseite - das wäre eine Rekursion, weil die Weiterleitung ebenfalls diese Bedingung erfüllt. Man muss also beim Request testen, dass die Bedingung nur einmal enthalten ist, also z.B. nur einmal /neueseite im Request steht. Genau das leistet der folgende Code. Im gegebenen Beispiel sollten unter /alteseite nur Dateien umgeleitet werden, wenn sie vom Typ *.htm sind. Wenn man diesen Teil allgemein macht - also alle Dateitypen, dann muss man die RewritCond wie bei neueseite gestalten, um die Rekursion zu vermeiden.

RewriteEngine on

RewriteCond %{REQUEST_URI} ^/neueseite/[^neueseite]+$
RewriteRule (.*)$ http://mydomain.de/neueseite/$1 [L,R=301]

RewriteCond %{REQUEST_URI} !^/alteseite
RewriteRule (.*)\.htm$ http://mydomain.de/alteseite/$1.htm [L,R=301]

Doppelten Content vermeiden

Durch folgenden Eintrag in die Datei .htaccess werden Anfragen an die Domain meinedomain.de auf www.meinedomain.de umgeleitet:

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

Automatische Sprachumschaltung

Falls eine Website mehrsprachig ist, dann könnte man zum Beispiel durch den Aufruf von www.meinedomain.de/index.htm auf der deutschsprachigen Seite landen. Und durch Aufruf von www.meinedomain.de/index_en.htm auf die englische Seite gelangen. In einem Webbrowser ist die bevorzugte Sprachvariante einstellbar. Beim Internet-Explorer geht das über Extras/Internetoptionen --> Sprache. Soll nun in Abhängigkeit, der im Browser als bevorzugt eingestellten Sprache, automatisch die richtige Sprachseite aufgerufen werden, dann muss man zum einen in der Datei .htaccess folgenden Eintrag vornehmen:

RewriteEngine on

AddType application/x-type-map var
Options +MultiViews
DirectoryIndex index

Und zum anderen muss eine Datei namens index.var mit folgendem Inhalt erstellt und diese in das Domainverzeichnis gelegt werden, wo auch die index-Datei zu finden ist:

URI: index; vary="type,language"

URI: index_en.htm
Content-type: text/html; qs=1.0
Content-language: en

URI: index.htm
Content-type: text/html; qs=0.8
Content-language: de

Bei dieser Vorgehensweise ist jedoch zu beachten, dass die Suchmaschinen-Bots mit einer englischen Voreinstellung kommen. D.h. wenn ohne die Automatik die Bots immer auf der deutschen Seite gelandet sind, dann werden sie jetzt automatisch auf die englische Seite geleitet. Falls auf der englischen Seite zum Beispiel viel weniger Inhalt zu finden ist, als auf der deutschen Seite, dann kann das zu unerwünschten Effekten führen. Also bitte vorher prüfen!

Ein weiterer, wichtiger Punkt ist zu beachten: Es wird eine Standardsprachvariante benötigt. D.h. wenn eine Website deutsch (de) und englisch (en) unterstützt, aber sich nun ein Anwender mit einem Browser anmeldet, welcher z.B. spanisch (es) eingestellt hat, dann würde er einen HTTP 406 Fehler ernten, wenn keine Standardsprachversion installiert ist. Welche Methode man für einen Standardsprachversion benutzen kann, ist abhängig vom verwendeten Webserver !

Hat man z.B. einen Apache 2.0.30 oder neuer, dann ist die Sache mit folgender Anweisung erledigt:

LanguagePriority en de  
ForceLanguagePriority Fallback

Bei einer niedrigeren Apache-Version geht das leider nicht, dann muss man wieder tricksen, indem man z.B. eine 406-Error-Seite anlegt, die einfach der gewünschten Sprachvarianten (z.B. englisch) entspricht. D.h. man legt eine Datei an error406.php, in der man die englische index-Datei inkludiert (bei php). In die .htaccess kommt dann einfach folgende Zeile und das Problem ist gelöst:

ErrorDocument 406 /error406.php

auf PHP5 umschalten

Die PHP Version lässt sich sehr einfach über die .htaccess-Datei umschalten. Dazu ist diese lediglich um folgenden Code zu erweitern:

#Auf PHP5 umschalten
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php


Detailierte .htaccess-Beschreibung

Eine detailierte Beschreibung zu .htaccess ist hier zu finden.