h-o: Umleitung von "http://www.domain.de" auf "http://domain.de"

hi,

bisher hab ich in der .htaccess folgenden Code verwendet, um das "www." aus dem Domainnamen zu "entfernen":

RewriteCond %{HTTP_HOST} ^www.domain.de$ [NC]
RewriteRule ^(.*) http://domain.de/$1      [R=301,L]

Das Ganze klappte bisher hervorragend.

Jetzt hab ich aber - aus Sicherheitsgründen - bestimmte Dateien außerhalb des Webs verschoben, d. h. das Serverstartverzeichnis, das beim Aufruf der Homepage geladen wird, lautet jetzt nicht mehr user/homepages/u123, sondern user/homepages/u123/web. Die .htaccess und eben andere sicherheitsrelevante Dateien befinden sich aber nach wie vor im Verzeichnis user/homepages/u123.

Beim Aufruf von http://domain.de/datei funktioniert alles wunderbar, aber beim Aufruf von http://www.domain.de wird durch obigen Code versucht, auf http://domain.de/web/ weiterzuleiten, was natürlich Quatsch ist und eine Fehlermeldung erzeugt, da es ja ein solches Verzeichnis nicht gibt (physikalisch müsste es ja user/homepages/u123/web/web sein, also ein "web" unterhalb von "web").

Abhilfe bringt zwar das Weglassen des "$1" in der RewriteRule-Zeile, also

RewriteRule ^(.*) http://domain.de/       [R=301,L]

Nachteil ist aber, dass beim Aufruf von http://www.domain.de/datei.htm IMMER nur auf die Startseite http://domain.de/ verwiesen wird, statt auf http://domain.de/datei.htm.

Hat irgendjemand eine Idee, wie das behoben werden kann (außer die .htaccess nach user/homepages/u123/web zu verlegen)?

Diese ominöse Weiterleitung von .htaccess auf das (physikalische) nicht existierende Unterverzeichnis user/homepages/u123/web/web/ ist mir irgendwie ein Rätsel...

  1. RewriteCond %{HTTP_HOST} ^www.domain.de$ [NC]
    RewriteRule ^(.*) http://domain.de/$1      [R=301,L]

    Das Ganze klappte bisher hervorragend.

    Jetzt hab ich aber - aus Sicherheitsgründen - bestimmte Dateien außerhalb des Webs verschoben, d. h. das Serverstartverzeichnis, das beim Aufruf der Homepage geladen wird, lautet jetzt nicht mehr user/homepages/u123, sondern user/homepages/u123/web. Die .htaccess und eben andere sicherheitsrelevante Dateien befinden sich aber nach wie vor im Verzeichnis user/homepages/u123.

    versuche es mal,  vor RewriteCond noch ein

    RewriteBase /web

    zu schreiben. Evtl. klappt es dann.

  2. Moin,

    RewriteCond %{HTTP_HOST} ^www.domain.de$ [NC]

    Hilft dir zwar mit deinem eigentlichen problem nicht weiter, aber du könntest auch ruhig andere Subdomains berücksichtigen, etwa wwww.example.org. Da es ziemlich viele mögliche Vertipper gibt, bietet sich folgende universelle Lösunga an:

    RewriteCond %{HTTP_HOST} !^example.org$
    RewriteCond %{REQUEST_URI} !^/robots.txt$
    RewriteRule ^(.*)$ http://example.org/$1 [R=301,L]

    Wenn man nur eine einzige Second-Level-Domain hat, braucht man sogar nicht mal die Domain hartkodiert in die Regel aufzunehmen:

    RewriteCond %{HTTP_HOST} .([^.]+.[^.0-9]+)$
    RewriteCond %{REQUEST_URI} !^/robots.txt$
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    Die robots.txt habe ich von den Regeln mal ausgenommen, da ich glaube, dass manche Bots mit Weiterleitungen nicht zurechtkommen.

    Vielleicht klappt ja das von gh vorgeschlagene RewriteBase, dann könntest du das ja mit einer der hier genannten Regeln verwenden.

    Tschau,
    Martin