15Jul/136

Rewrite Rules mit htaccess

Contabo Webspace XXLEine oft gestellte Frage betrifft überwiegend unsere Webspace-Pakete, ist aber mit Sicherheit für viele interessant:

Wie kann ich den Inhalt meiner Hauptdomain in einen Unterordner ablegen, ohne dass der Besucher einen Unterschied sieht?

 

Das Problem ist, dass cPanel einem Account genau eine Domain als Haupt-Domain zuweist. Addon-Domains können zwar hinzugefügt werden, landen in der Ordnerstruktur aber einfach unterhalb des Ordners der Haupt-Domain. Das sieht dann z.B. so aus:

  • /
    • public_html/
      • admin/
      • config/
      • data/
      • testdomain2.de/
        • admin/
        • config/
        • data/
        • themes/
        • index.php
      • themes/
      • index.php

Das kann bei mehreren Addon-Domains schnell sehr unübersichtlich werden. Besser wäre, die Hauptdomain auch in einen eigenen Ordner zu verlagern. Genau hier fehlt leider eine Option in cPanel. Glücklicherweise ist das auch gar nicht nötig, denn mittels Rewrite Rule in der .htaccess-Datei können Sie selbst festlegen, wo sich der Inhalt der Haupt-Domain befinden soll.

Idealerweise beginnen Sie mit einem frisch aufgesetztem Webspace-Paket. Ansonsten gilt die Faustregel, zunächst ein Backup aller Daten zu erstellen, um bei Problemen den ursprünglichen Zustand wiederherstellen zu können. Hier erweist sich der cPanel-Sicherungsassistent als nützlich.

Die folgenden Schritte können bequem per FTP-Client erledigt werden.

Wenn bestehende Daten übernommen werden sollen, legt man zunächst einen neuen Ordner in /public_html an und benennt ihn nach der Domain, also z.B. testdomain.de. Dorthin verschiebt man alle Dateien und Ordner, die zu der Seite gehören. In unserem Beispiel sind das die Ordner admin, config, data, themes und die Datei index.php. Falls bereits eine .htaccess-Datei vorhanden ist, wird diese auch dorthin verschoben.

Als nächstes muss eine neue .htaccess-Datei in /public_html angelegt werden. Diese öffnet man mit einem Editor und fügt folgende Zeilen ein:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^testdomain.de$ [OR]
RewriteCond %{HTTP_HOST} ^www.testdomain.de$
RewriteCond %{REQUEST_URI} !^/testdomain.de
RewriteRule ^(.*)$ testdomain.de/$1 [L]

testdomain.de ist durch den eigentlichen Domain-Namen zu ersetzen.

Nachdem die Datei gespeichert wurde, kann man die Domain bereits im Browser aufrufen. Die Seite sollte korrekt angezeigt werden.

Der nächste Schritt hängt von der verwendeten Software ab. In diesem Beispiel wird die Vorgehensweise für Joomla! 3 und WordPress erläutert.

Meistens werden die URLs auf einer Seite relativ zum Speicherort generiert. Nach unserer Änderung würden Unterseiten also nach folgendem Schema in der Browser-Adresszeile angezeigt werden:

http://testdomain.de/testdomain.de/index.php

Um das zu korrigieren, muss in der Joomla!-Konfiguration die Basis-URL absolut festgelegt werden. Dazu wird folgende Zeile in der configuration.php bearbeitet:

public $live_site = 'http://www.testdomain.de/';

Unter Umständen muss für die Datei configuration.php vorab Schreibrecht gewährt werden.

Wenn in Joomla! URL Rewriting aktiviert wurde, muss noch in der .htaccess-Datei im Unterordner der Domain folgende Zeile bearbeitet werden:

RewriteBase /testdomain.de

Die Raute am Zeilenanfang muss unbedingt entfernt werden.

WordPress lässt sich analog in der Konfigurationsdatei wp-config.php anpassen:

define('WP_HOME','http://testdomain.de');
define('WP_SITEURL','http://testdomain.de');

Die Änderungen sind damit nach außen komplett transparent. Die Seite ist wie gewohnt unter der Domain erreichbar. Die neue Ordnerstruktur ist deutlich übersichtlicher:

  • /
    • public_html/
      • testdomain.de/
        • admin/
        • config/
        • data/
        • themes/
        • index.php
      • testdomain2.de/
        • admin/
        • config/
        • data/
        • themes/
        • index.php
      • .htaccess

Das ist nur eine der vielen Möglichkeiten, die Rewrite Rules bieten. Wer mehr über dieses komplexe Thema erfahren möchte, wird unter anderem hier fündig.

Posted by: Tino | Tagged as: , Leave a comment
Comments (6) Trackbacks (0)
  1. Wieder mal ein interessanter Post, danke.
    Ein paar Fragen/Anmerkungen hätte ich aber bezüglich der .htaccess eben noch:

    Da das reguläre Ausdrücke sind sollte man genaugenommen die Punkte mit einem vorangestellten \ escapen. Es ist zwar unwahrscheinlich das man Probleme bekommt weil ein . in regulären ausdrücken ein beliebiges Zeichen darstellt, aber jeder kennt ja Murphys Gesetz. 😉

    Das sieht dann so aus

    RewriteCond %{HTTP_HOST} ^testdomain\.de$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.testdomain\.de$

    Wer keine Lust auf reguläre Ausdrücke hat kann das in diesem Fall per vorangestellten = auch direkt vergleichen (sollte auch einen klitzekleinen Hauch schneller sein).

    RewriteCond %{HTTP_HOST} =testdomain.de [OR]
    RewriteCond %{HTTP_HOST} =www.testdomain.de

    Mir ist nicht ganz klar für was die letzte RewriteCond genau nützlich sein soll.

    PS: Einen schönen SysAdmin Day. 😉

  2. Hallo Markus,

    danke für dein Feedback.

    Rewrite Rules bieten natürlich Raum für Optimierungen. Mehrere Wege führen zum gewünschten Ziel.

    Die Zeile RewriteCond %{REQUEST_URI} !^/testdomain.de bedeutet, dass die Umleitung nicht aktiv ist, wenn http://www.testdomain.de/testdomain.de aufgerufen werden würde. Ohne sie funktioniert die Umleitung jedenfalls nicht und es wird nur ein 500-Fehler angezeigt.

  3. Stimmt, ohne die letzte RewriteCond dürfte es zu einer Rewrite-Schleife kommen.

  4. Wie kann man die Basis-URL in ezPublish entsprechend ändern? Das ist mir nicht gelungen. Bei WordPress funktioniert das oben genannte super, aber bei ezPublish bekomme ich es nicht in Gang – hier funktioniert die Webseite nur wenn der Unterornder in der URL mit steht.

  5. Hallo Christian,
    wenn von uns aus auch etwas verspätet: Danke für deinen Kommentar.

    Leider können wir dir hier pauschal nicht helfen, das kann einfach an zu vielen Eigenschaften liegen, trotzdem könnte es sich lohnen, mal einen Blick auf RewriteBase zu werfen.

    Gerne kannst du dich mit deinem Problem an unseren Support wenden, wir machen hier gerne eine Ausnahme und versuchen uns deinem Problem zu widmen.

  6. Hi Markus,

    guter Tipp… so etwas hatte ich in cPanel vergeblich gesucht.

    Eine Frage zu “RewriteCond %{REQUEST_URI} !^/testdomain.de”: Die Notwendigkeit ist logisch. Ich möchte auf der anderen Seite aber unterbinden, dass ein direkter Aufruf des Verzeichnisses “http://www.testdomain.de/testdomain.de” nicht möglich ist bzw. ebenfalls auf “http://www.testdomain.de” umgeleitet wird.

    Hat da jemand einen Trick auf Lager?

    Vielen Dank.

    Beste Grüße aus Köln
    Wolfram


Leave a comment


No trackbacks yet.