Die Grenzen der Frame-Weiterleitung sprengen

Viele Hoster bieten günstige Domains ohne Webhosting Komponenten an. Bei einigen Hoster wie z.B. Strato handelt es sich aber leider nur um Domains mit der Möglichkeit der Frame-Weiterleitung. Das ist aber teilweise vor der Bestellung nicht zu sehen.

Manch einer wird sich eventuell darüber freuen, da er irgendwo ein kostenloses Hosting mit einer sehr langen URL hat und durch die Frameweiterleitung den Besuchern immer eine kurze Domain präsentieren kann. Doch die Sache hat auch ihre Haken.

Das Lesezeichen-Problem

Das navigieren innerhalb der Seite gestaltet sich für den Besucher, wie er es erwartet. Er kann alle Links anklicken und der Hauptframe öffnet daraufhin die richtige Seite. Auch das Navigieren mit den „Vor“ und „Zurück“ Buttons funktioniert tadellos. Aber sobald der Benutzer eine Seite gefunden hat, die er seinen Favoriten hinzufügen möchte fängt der Ärger an. Nicht nur, dass der Name des Lesezeichens oft nur die Domain enthält, viel schlimmer ist, dass das Lesezeichen auch auf die selbige zeigt. Wenn der Besucher also später das Lesezeichen aufruft kommt er nicht auf die gewünschte Seite, sondern auf die Startseite und muss von dort aus erst wieder mühsam auf die richtige Seite navigieren.

Das Suchmaschinen-Problem

Die meisten Suchmaschinen (Google eingeschlossen) haben Probleme mit framebasierten Seiten. Sie sehen oft nur das Frameset-Konstrukt und nicht die Inhalte der einzelnen Frames. Das bedeutet in den meisten Fällen, das eure Internet-Seiten, die tausende von Seiten haben können, bei Suchmaschinen genau EINE Seite als Eintrag enthalten. Und das ist die Startseite oder genauer gesagt das Frameset der Domain. Eine Möglichkeit den Suchmaschinen doch die anderen Seiten mitzuteilen ist das Erstellen einer Sitemap. Diese solltet ihr dann aber manuell den Suchmaschinen mitteilen, da sie die Datei unter umständen auch nicht finden können. Dabei könnt ihr entweder die Domain um die Seitennamen erweitern, oder aber die URL eures Webspace verwenden und um die Seitennamen erweitern.

Die Lösung

Beide Probleme zeigen also, dass Frame-Weiterleitungen ein Relikt aus alten Zeiten sind und nicht mehr verwendet werden sollten. Aber was kann man tun, wenn der Hoster keine HTTP-Weiterleitung bietet, oder dafür einen Aufpreis verlangt? Ganz einfach, man bedient sich eines recht simplen Tricks. Dazu legt man zuerst einen Ordner mit beliebigen Namen auf dem Server an. Dann stellt man die Domain so ein, dass sie als Ziel den Ordner enthält. In diesem Ordner erzeugt man dann eine index.php (oder eine Index-Datei einer andern Scriptsprache) mit folgendem Inhalt:

<script type="text/javascript">
	top.location.href = "http://example.com";
</script>

Dieser einfache JavaScript Snippet ändert die URL des Top-Frame auf einen neuen Wert. Wenn der Besucher also eure Domain aufruft, die lediglich eine Frame-Weiterleitung untersützt, sorgt der Code dafür, dass das oberste Frameset auf eine andere URL umgeleitet wird. Hierbei müsste ihr natürlich „example.com“ durch eure eigene Domain ersetzen (das „http://“ dabei nicht vergessen). Für alle Besucher, die keine JavaScript Unterstützung aktiviert haben solltet ihr zusätzlich einen NOSCRIPT Tag einfügen der einen Link enthält:

<noscript>
	Sollten Sie nicht weitergeleitet werden, klicken Sie auf den folgenden Link:
	<a href="http://example.com" target="top">http://example.com</a>
</noscript>

Der Link bekommt dabei das Attribut „target“ mit dem Wert „top“. Somit wird auch hier der Link im obersren Frameset aufgerufen. Um Benutzern, die ein Lesezeichen auf eure umzuleitende Domain haben, könntet ihr auch noch den Request an die Domain anhängen. Somit wird der Besucher dann auf die richtige Zielseite auf der anderen Domain umgeleitet. Zusammengesetzt sieht das ganze Beispiel dann wie folgt aus (oder ähnlich in einer anderen Skriptsprache):

<script type="text/javascript">
	top.location.href = "http://example.com"<?php echo $_SERVER['REQUEST_URI']; >
</script>
<noscript>
	Sollten Sie nicht weitergeleitet werden, klicken Sie auf den folgenden Link:
	<?php echo '<a href="http://example.com'.$_SERVER['REQUEST_URI'].'" target="top">http://example.com'.$_SERVER['REQUEST_URI'].'</a>'; ?>
</noscript>

Diesen Codeblock platziert Ihr einfach im BODY Tag der Index-Seite. Dabei solltet ihr aber Besuchern ohne JavaScript eine schönere Seite präsentieren, als eine die nur den Link auf weißem Untergrund enthält.

Da ich selbst noch eine Domain besitze, die ich leider zur Zeit noch nicht auf ein aktuelles Hostingpaket umziehen kann, könnt ihr euch das ganze in einem kleinen Beispiel auch ansehen. Die Domain ist mittlerweile endlich umgezogen und daher habe ich nun das Beispiel auf die alte Subdomain abgeändert. Dazu solltet ihr einfach JavaScript vorübergehen deaktivieren, damit ihr auch die Seite und den Quelltext betrachten könnt. Wenn ihr dann JavaScript wieder aktiviert und die Seite aktualisiert, solltet ihr auf meinen Blog umgeleitet werden.

Beispiel

Mit diesem Trick könnt ihr also die Frame-Weiterleitung umgehen, aber ihr präsentiert dann dem Besucher die entsprechend andere URL, als sie aufgerufen haben. Dies sollte aber einer schönen URL aber dafür der eingeschränkten Suchmaschinenfreundlichkeit und der Verhinderung von Lesezeichen bevorzugt werden. Ihr könnt weiterhin die schöne URL in Mails verbreiten und den Besucher trotzdem umleiten. Wenn ihr die Domain vollständig nutzen möchtet bleibt euch leider nichts anderes Möglich, als diese in das Webhosting-Paket zu übertragen oder zu einem reinen Domain-Anbieter zu wechseln, der auch eine HTTP-Weiterleitung anbietet, auch wenn das eventuell einen Aufpreis bedeutet.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

17 Kommentare » Schreibe einen Kommentar

    • Wenn du möchtest, dass die Parameter nicht übergeben werden, dann könntest du sie einfach vorher entfernen, bevor du den Redirect im JavaScript einfügt. Z.B: wie folgt:

      <script type="text/javascript">
         top.location.href = "http://example.com"<?php echo str_replace($_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']); ?>
      </script>
      

      Das würde alle Parameter entfernen und somit immer auf die Seite weiterleiten, die du in der kurzen URL angegeben hast.

      Ich habe mittlerweile die Domain auf ein aktuelles Paket umgestellt. Dort habe ich die Möglichkeit eine DNS Weiterleitung zu machen. Mein alter Vetrag hatte 0,19€ pro Monat für die Domain gekostet und der neue kostet nun 0,49€. Aber da ich dadurch einen „neuen“ Vertrag bekommen habe, ist das erste Jahr wieder kostenlos gewesen.

      Also versuche es mal mit meinem Trick oder überlege dir den Vertrag auf einen aktuellen mit HTTP-Weiterleitung oder DNS-Eintrag umzustellen.

        • Tja, das geht leider nicht. Damit sich die Domain beim Nutzer nicht ändert musste du es bei einer Frame-Weiterleitung belassen oder eben eine echte HTTP-Weiterleitung nutzen. Ich würde dir also vorschlagen dein Domain-Paket auf eine höheres upzugraden damit du die HTTP-Witerleitung nutzen kannst.

  1. Der Tipp hilft leider nur für Besucher, nicht für Suchmaschinen, die kein Javascript interpretieren. Diese ‚kostenlosen‘ Strato-Domains produzieren leider duplicate content.

    Samuel

    • Das ist leider war. Aber es hilft zumindest für Benutzer, die die Website besuchen möchten. Eine Domain mit Frames ist immer schlecht für Suchmaschinen indizierbar. Aber dass es Domains kostenlos bei Strato geben soll, ist mir neu.

  2. Klasse, vielen Dank für die Anleitung! Ich hab schon ein paar Dinge ausprobiert, aber nichts konnte Strato austricksen. Erst mit deinem Trick hat es dann endlich funktioniert und ich kann die Vertipper-URL auf die richtige Seite weiterleiten ohne den Vertipper weiter in der URL stehen zu haben. Viele Grüße Marco

  3. Bin heute auch auf das Problem mit der Frame-Umleitung gestoßen. Allerdings bietet Strato ja (nun?) auch A und AAAA DNS Records an, so dass für die ip ein Domain Alias erstellt wird. Dann ist man echt mit dem Domain-Namen unterwegs !

    • Das ist richtig, bei neueren Domain Paketen gibt es diese Optionen. Aber eine lief eben noch auf einem alten und sehr günstigen Vertrag und da ging das nur, wenn man in den neuen und teureren Tarif gewechselt hat. Mittlerweile habe ich ohnehin alle Domains zu Host Europe umgezogen, da ich hier z. B. Auch einen CNAME einstellen kann, was mit Starto in den einfachen Paketen auch nicht ging.

  4. Ich habe auch eine Domain bei Strato. Ich würde gern eine https – Weiterleitung auf einen Server bei mir zu Hause durchführen. Leider gelingt es mir nicht. Eine http – Weiterleitung kann ich bei Strato einrichten, https leider nicht. Hat dafür jemand eine Lösung?

    Viele Grüße

    • Was genau ist denn das Ziel der Weiterleitung? Was auf jeden Fall gehen sollte: Leite per HTTP auf den lokalen Server um und dann dort z.B. per .htaccess RewriteRule auf HTTPS.

  5. Vielen Dank für die schnelle Antwort. Umleitung per .htaccess mit http habe ich schon realisiert und funktioniert auch. Das hat aber zwei Probleme: https scheint nicht zu funktionieren und der Anwender sieht nicht die ursprüngliche url in der Adresszeile des Browsers sondern, die etwas kryptische url des Servers auf den umgeleitet wird.
    Mein Plan ist der Folgende:
    – der Benutzer gibt im Browser z.B. ein: https://meinedomain.de (bei Strato gehostet)
    – Strato soll umleiten auf etwas wie: xyz.myfritz.net
    – auf xyz.myfritz.net ist eine DNU – Umleitung auf die IP-Adresse meiner Fritzbox
    – in meiner Fritzbox habe ich eine Portweiterleitung auf einen Debian – Server.
    – auf diesem Debian Server habe ich z.B. einen Seafile – Server mit https – Zugang
    Und o.g. Konstrukt läuf leider noch nicht. Mein wesentliches Problem: Strato kann https nicht weiterleiten (sondern nur http). Hast Du da einen Tipp für mich?

    • Also das was du vorhast wird so nicht funktionieren. Und das ist auch gut so 🙂

      Es würde ja einem „Man in the Middle“ gleichkommen. Du würdest also vor dem Nutzer verschleiern, welche Domain sich wirklich hinter der Domain im Browser versteckt.

      Mit einer Domain-Umleitung ist es nicht umzusetzen. Hättest du eine Domain, bei der du einen CNAME für die Domain festlegst, der auf die dynamische Domain deiner FritzBox zeigt. Ich weiß aber nicht, ob das in deinem Strato-Paket möglich ist. Falls nicht, müsste du wohl auf ein höherwertiges Paket wechseln.

      • Hallo, ich habe es jetzt am laufen. Mein Strato Account bietet die Möglichkeit einen CNAME anzulegen – damit bin ich dann auf meine Fritzbox bekommen. Mit den geeigneten Portweiterleitungen komme ich dann auf meinen Debian Server. Hier hatte ich dann leider noch einige Schwierigkeiten. Letztendlich habe ich es mit Apache nicht hinbekommen – wie offensichtlich einge andere Leute auch. Nach dem ich auf nginx umgestellt hatte läuft alles perfekt.
        Vielen Dank für Deine Unterstützung.

    • Ich weiß leider nicht, was du mit „verstecken“ meinst. Möchtest du nicht, dass jemand sieht, welche URL im Frame verwendet wird? Das ist ja der „Standard“. Aber dann verwendet deine Seite eben noch immer einen Frame, was eben nicht optimal ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert