Lars WW.: htaccess: Je Domain auf anderes Unterverzeichnis leiten

Hallo,

Kurzfassung:

Webroot-Verzeichnis ist ~/html, dort landen Anfragen von insgesamt 4 verschiedenen Domains. Ich möchte:

  • 4 einzelne Verzeichnisse erstellen, dort eigenständige Webseiten unterbringen

  • anhand einer .htaccess unterscheiden, aus welchem Unterverzeichnis er sich nun die htdocs zieht.

Ich habe dafür folgende RewriteRule:

RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [L]

Allerdings landet er nun in einer Endlosschleife. Ich müsste also eine Condition vorschalten, bei der ich abfrage, ob er bereits versucht auf das Verzeichnis %{HTTP_HOST} zuzugreifen (bzw. auf das Verzeichnis ~/html/%{HTTP_HOST}, wenn man genau ist).

Im Prinzip müsste ich die REDIRECT_URL abfragen, wenn ich mich nicht irre, und nur weiterleiten wenn die REDIRECT_URL noch nicht den HTTP_HOST beinhaltet? Kann da jemand weiterhelfen?

Lg Lars

  1. Du suchst Virtual Document Root. MfG

    1. Hello Rolf,

      Du suchst Virtual Document Root.

      Die Directive virtualDocumentRoot ist in der .htaccess nicht zulässig.

      Wenn das Anliegen des OP überhaupt ohne VirtualHost-Konfiguration zu lösen ist, dann mittels Rewriterules und Proxy-Directiven. Alternativ könnte er auch in einer zentralen index.php (als Beispiel) die Anfragen dispatchen. Dort ist ja $_SERVER['HTTP_HOST'] bekannt.

      Die Files könnten dann auch außerhalb deS HTTP-Zugriffsbereiches liegen.

      Liebe Grüße
      Tom S.

      --
      Die Krawatte ist das Kopftuch des Westens
  2. Tach!

    Webroot-Verzeichnis ist ~/html, dort landen Anfragen von insgesamt 4 verschiedenen Domains. Ich möchte:

    • 4 einzelne Verzeichnisse erstellen, dort eigenständige Webseiten unterbringen

    • anhand einer .htaccess unterscheiden, aus welchem Unterverzeichnis er sich nun die htdocs zieht.

    Man kann das vermutlich auch mit RewriteRules machen, aber eigentlich sind für solch einen Anwendungsfall V-Hosts vorgesehen. Bietet es dein Provider nicht an, je Domain ein eigenes Unterverzeichnis festzulegen?

    RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [L]
    

    Allerdings landet er nun in einer Endlosschleife. Ich müsste also eine Condition vorschalten, bei der ich abfrage, ob er bereits versucht auf das Verzeichnis %{HTTP_HOST} zuzugreifen (bzw. auf das Verzeichnis ~/html/%{HTTP_HOST}, wenn man genau ist).

    Nach jedem Redirect wird der Request intern nochmal neu bewertet. Wenn es denn unbedingt diese Vorgehensweise sein soll, dann musst du vorhandene Dateien und Verzeichnisse vom Umschreiben ausschließen. Die Condition muss also testen, ob der REQUEST_URI auf -f oder -d passt.

    dedlfix.

    1. Hmmm das bringt mich leider nicht weiter:

      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ %{HTTP_HOST}/$1
      

      In diesem Fall bearbeitet er die Rule anscheinend gar nicht und öffnet die index.php in ~/html.

      Meine Verzeichnis-Struktur sieht so aus:

      ~/html
      ~/html/.htaccess
      ~/html/domain1.de/index.php
      ~/html/domain2.de/index.php
      ~/html/www.domain1.de/index.php
      ~/html/www.domain2.de/index.php
      

      Und ich versuche diese URL aufzurufen: https://www.domain1.de

      ... und würde erwarten, dass er die entsprechende index.php aufruft.

      1. Tach!

        Hmmm das bringt mich leider nicht weiter:

        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ %{HTTP_HOST}/$1
        

        In diesem Fall bearbeitet er die Rule anscheinend gar nicht und öffnet die index.php in ~/html.

        Wenn du einen Request nach / stellst, dann findet es da natürlich das DirectoryIndex-Dokument. Dann musst du eben für das eine Ausnahme definieren, wenn es in der Wurzel liegt.

        dedlfix.

      2. Hallo Lars WW.,

        Und ich versuche diese URL aufzurufen: https://www.domain1.de

        Verwende für Beispieldomains die dafür vorgesehenen example.com, example.org. Die o.g. ist zum Beispiel bereits vergeben.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
  3. Ich hatte mal ein ähnliches Problem und habe das gelöst, indem ich eine environment variable gesetzt hatte. In etwas so:

    RewriteCond %{ENV:REDIRECT_ENV} !^.+$
    RewriteCond %{HTTP_HOST} ^(.+?)\.example\.com$
    RewriteRule ^(.*)$ /%1/$1 [L,E=ENV:%1]
    

    Das sollte foo.example.com/bar umleiten auf example.com/foo/bar. Wenn du grundlegend verschiedene Domains hast müsstest du das natürlich entsprechend umbauen.