Apache: RedirectMatch zur Weiterleitung?
Andreas K.
- webserver
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
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
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
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
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
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