Zur Navigation

Die Variable " seite=1 " soll abgeschnitten werden

1 Detlef (Gast)

Hallo Jörg,
ich möchte folgende URL Varianten mit einem 301 umleiten um DC zu vermeiden. Der Wert in der Variable keyword soll erhalten bleiben, lediglich wenn die Variable "seite" mit dem Wert 1 (und nur dann!) gefüllt ist soll umgeleitet werden. Die Variable keyword besteht aus Ziffern, Buchstaben in Groß- u. Kleinschreibung, den Sonderzeichen % " und - ....

/such_ergebnis.php?Tag=1&keyword=Bild%20D%Zeitung%20D%Seite%20D%5&seite=1

Dabei soll die Variable " seite=1 " abgeschnitten werden und zu:

/such_ergebnis.php?Tag=1&keyword=Bild%20D%Zeitung%20D%Seite%20D%5

umgeleitet werden.
Mir bereiten u.a. die Sonderzeichen Probleme.

Wie könnte die rewriteRule aussehen?

Danke und Gruß
Detlef

12.11.2011 22:22

2 Jörg

Ich würde das so probieren:

RewriteCond %{QUERY_STRING} Tag=([0-9]*)&keyword=(.*)&seite=1
RewriteRule ^such_ergebnis\.php$ http://example.com/such_ergebnis.php?Tag=%1&keyword=%2 [R=301]

... unter der Annahme, dass der Parameter "Tag" eine Zahl enthält, anderfalls "Tag=(.*)"

12.11.2011 22:31 | geändert: 12.11.2011 22:32

3 Detlef (Gast)

Hallo Jörg,

... die Umleitung funktioniert! Super!

Jetzt fällt mir aber ein Problem auf.

Der Parameter keyword enthält z.b. :

Bild%20D%Zeitung%20D%Seite%20D%5

... die natürlich nun auch 1 zu 1 übernommen und damit nicht mehr weiterverarbeitet werden. Die Fett markierten "Leerzeichen" können also nicht entfernt werden und der Parameter in der Form:

Bild Zeitung Seite 5 übergeben werden?

*HOFFNUNGSMODUS AN* ;-)

Gruß
Detlef

12.11.2011 22:47

4 Jörg

Leerezeichen werden in URLs normalerweise als "20%" (oder alternativ als "+") kodiert - was hat es denn mit dem dahinterhängenden "D%" auf sich?

12.11.2011 23:01

5 Detlef (Gast)

Sorry Jörg, Fehler meinerseits. Natürlich sind es nur %20 die die Leerzeichen darstellen.
Aber als ob das noch nicht genug ist habe ich gerade festgestellt, dass kodierte Umlaute Ä,ä,ö,Ö,ü,Ü leider auch betroffen sind. Wie ich bereits einmal schrieb, die Geister die ich einst rief werde ich nun wahrscheinlich wirklich nicht mehr los ...

Gruß
Detlef

12.11.2011 23:19

6 Jörg

mod_rewrite kodiert hier ein zweites Mal - das Problem hatten wir hier auch schon mal:

https://joergs-forum.de/weiterleitung-von-alten-auf-neuen-shop-t-1071-1

... und wurde auch als Bug behandelt aber wohl noch nicht umfassend behoben:

https://issues.apache.org/bugzilla/show_bug.cgi?id=34602

Ich würde hier stattdessen mit PHP weiterleiten, in etwa so (ungetestet):

if (isset($_GET['seite']) && $_GET['seite'] == 1) {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://' . $_SERVER['HTTP_HOST'] . '/such_ergebnis.php?Tag=' . urlencode($_GET['Tag']) . '&keyword=' . urlencode($_GET['keyword']));
    header('Connection: close');
    exit;
}

Falls hier auch etwas zuviel kodiert wrid, kannst du dies noch mit urldecode() beheben

12.11.2011 23:47 | geändert: 13.11.2011 00:27

7 Detlef (Gast)

Hallo Jörg,
es ist also nicht möglich, die Leerzeichencodierung und Umlaute mit modrewrite entsprechend zu behandeln?

Wie könnte ich zumindest die Leerzeichenzeichenkette korrekt übergeben?
Eine php Umleitung wollte ich eigentlich vermeiden, da hier wohl weitere "Probleme" zu erwarten sind.

Gruß
Detlef

12.11.2011 23:53

8 Jörg

es ist also nicht möglich, die Leerzeichencodierung und Umlaute mit modrewrite entsprechend zu behandeln?

Normalerweise sollte wohl das [NE] Flag eine Kodierung verhindern - bei mir funktioniert das allerdings nicht und auch in dem verlinkten Bugreport ist ja auch beschrieben, dass dieses in den genannten Fällen nicht hilft.

Wie könnte ich zumindest die Leerzeichenzeichenkette korrekt übergeben?

Ein Leerzeichen lässt sich als "\ " wiedergeben oder indem die Zeichenkette mit Leerzeichen in doppelte Anführungszeichen gesetzt wird; aber das lässt sich nicht mit Variablen nutzen, nur für einzelne konkrete URLs

Eine php Umleitung wollte ich eigentlich vermeiden, da hier wohl weitere "Probleme" zu erwarten sind.

Was für Probleme?

13.11.2011 00:01 | geändert: 13.11.2011 00:04

9 Detlef (Gast)

Welche Probleme?

Also z.b. Sicherheit. Die Parameter müssen doch geprüft werden (Schadcode) und da hängt es schon wieder draussen bei mir ... :-(
Was ist, wenn jemand die Parameter manipuliert?

Gruß
Detlef

13.11.2011 00:19

10 Jörg

Ich habe den obigen PHP-Code mit urlencode() ergänzt. das kannst du gefahrlos so verwenden.

13.11.2011 00:33