Andreas K.: Apache: RedirectMatch zur Weiterleitung?

Hallo

ich habe einige Ideen zu Weiterleitungen gesehen, keine scheint aber für meinen Fall zu passen.
Vielleicht kennt sich hier jemand besser mit Apache und .htaccess aus.

Wie muss ein Redirect(Match?) aussehen, der mir ab einem Pfad alle Parameter mit an eine neue Adresse übergibt.

Es geht um einen Serverumzug. Aus http://www.meinspace.de/news/aktuell.php?sid=&date=110102 soll http://www.neuerspace.de/news/aktuell.php?sid=&date=110102 werden.
Wenn also Benutzer noch auf die alten URLs zugreifen sollten sie auf dem neuen space landen und die richtigen infos bekommen.

Mit "redirect permanent / http://xyz..." gehen die parameter verloren :(

Dankbar für jeglichen Hinweis,
Andi

  1. Hallo

    ich habe einige Ideen zu Weiterleitungen gesehen, keine scheint aber für meinen Fall zu passen.
    Vielleicht kennt sich hier jemand besser mit Apache und .htaccess aus.

    Wie muss ein Redirect(Match?) aussehen, der mir ab einem Pfad alle Parameter mit an eine neue Adresse übergibt.

    Wenn du dich mit regulären Ausdrücken zurechtfindest, kannst du jedes Detail wegschneiden oder anfügen:

    Info unter: http://httpd.apache.org/docs-2.0/mod/mod_alias.html#redirectmatch

    Ciao

    W. Pichler

    1. Guten Morgen,

      danke für das php-beispiel, ich müsste dazu eine Menge an php-dateien so befüllen, daher wäre mir die Lösung mit RedirectMatch im Moment lieber (wenn ich das hinbekomme).

      Leider kenne ich mich mit regulären Ausdrücken nur rudimentär aus,
      unter http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#allgemeines
      und http://httpd.apache.org/docs-2.0/mod/mod_alias.html#redirectmatch habe ich einiges gefunden, nur komme ich damit nicht ganz zurecht.

      Wie sieht denn so ein Ausdruck für alle strings aus?
      RedirectMatch (.*)$ http://www.xyz.de/$
      Kommt mir nicht richtig vor.

      Hier hapert es bei mir schon am Verständnis, es soll ja "lediglich" alles ab dem letzten slash kopiert werden, also
      http://www.abc.de/verzeichnis/meinephp.php?meinparam=1&meinparam2=3
      zu
      http://www.xyz.de/verzeichnis/meinephp.php?meinparam=1&meinparam2=3

      Lost in regexp,
      Andi

      1. Hi Andi,

        URL-Abbildungen verwende ich eigentlich nicht selbst, aber ein Blick
        ins Handbuch hilft enorm:

        Wie sieht denn so ein Ausdruck für alle strings aus?
        RedirectMatch (.*)$ http://www.xyz.de/$
        Kommt mir nicht richtig vor.

        http://httpd.apache.org/docs/mod/mod_alias.html#redirectmatch
        beschreibt u. a. mit einem Beispiel fast genau Deinen Fall:

        RedirectMatch (.*).gif$ http://www.anotherserver.com$1.jpg

        Auf der linken Seite beschreibst Du das Muster des URL, und durch die
        runden Klammern speicherst Du den Inhalt des dort geparsten Teils in
        einer Variablen (siehe unten).
        Das '$'-Zeichen dient als Ende-Markierung des regulären Ausdrucks,
        damit Du den vollständigen URL matchst und nicht nur irgend ein Stück
        desselben.

        Auf der rechten Seite beschreibst Du das Muster des URL, welches bei
        der Umleitung erzeugt werden soll. Das besteht aus Deinem neuen Präfix
        und dem Inhalt dessen, was Du auf der linken Seite geparst hast - denn
        Du willst ja dieselben URLs auf dem neuen Server haben wie auf dem alten.
        Den Inhalt der runden Klammern mußt Du nun auf der rechten Seite durch
        eine Referenz auf diese Variable einsetzen lassen - da es die erste runde
        Klammer war, mit $1 (genau wie Du das auch in Perl tun würdest und wie
        es auch im Handbuch-Beispiel verwendet wurde).

        In Deinem Fall müßtest Du also auf der linken Seite die alte Domain
        plus das Muster der dazu lokalen URLs beschreiben und auf der rechten
        Seite die neue Domain plus die Referenz auf dieses Muster - jetzt klar?

        Viele Grüße
              Michael

        1. Hi nochmal,

          In Deinem Fall müßtest Du also auf der linken Seite die alte Domain

          ups - das ist wohl verkehrt, denn RedirectMatch bezieht sich ja auf URLs
          innerhalb Deiner Domain, da ist der Domain-Teil schon nicht mehr dabei.
          Ich hatte gedacht, Du müßtest den noch extra herausschneiden.

          Deine Idee war also schon fast perfekt, außer daß rechts das '$1' fehlte,
          wo Du ein '$' stehen hattest.
          Beides sieht zwar ähnlich aus, bedeutet aber etwas völlig Verschiedenes.

          Viele Grüße
                Michael

  2. Hi Andi,

    Es geht um einen Serverumzug. Aus http://www.meinspace.de/news/aktuell.php?sid=&date=110102 soll http://www.neuerspace.de/news/aktuell.php?sid=&date=110102 werden.

    Wenn es nur um eine oder mehrere Dateien geht, empfehle ich
    dir ein kleines, drei Zeilen langes PHP-Script:

    <?
      $location = "http://www.neuer-server.de$PHP_SELF";
      if(!empty($QUERY_STRING)) $location .= "?$QUERY_STRING";
      header("Location: $location");
    ?>

    Das kannst du dann als
    http://www.alter-server.de/news/aktuell.php abspeichern, und
    beim Aufruf wird auf den neuen umgeleitet. Wenn Parameter
    vorhanden sind ($QUERY_STRING), werden die noch angehängt.

    Bye,
    Peter