Apache Rewrite

- webserver
Hallo!
Ich hatte ein ähnliches Problem schon vor einiger Zeit. Jetzt wurde wieder ein falscher Link gesetzt, aber ich komme mit dem Rewriting nicht zurecht:
Von http://forum.bebac.at/mix_entry.php?id=3D4426#p4432
soll auf
http://forum.bebac.at/mix_entry.php?id=4426#p4432
umgeleitet werden (d.h. das hex-kodierte Fragezeichen soll umgewandelt werden).
Mein Versuch in .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^id=3D4426#p4432$
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426#4432 [R=301,L]
führt aber zu
http://forum.bebac.at/mix.php#p4432
Was mache ich hier falsch? Ich habe schon versucht das '?' mit einem backslash zu escapen, gleiches Resultat.
mfg Alfie
Ich hatte ein ähnliches Problem schon vor einiger Zeit. Jetzt wurde wieder ein falscher Link gesetzt, aber ich komme mit dem Rewriting nicht zurecht:
Von http://forum.bebac.at/mix_entry.php?id=3D4426#p4432
soll auf
http://forum.bebac.at/mix_entry.php?id=4426#p4432
umgeleitet werden (d.h. das hex-kodierte Fragezeichen soll umgewandelt werden).
Interessanter ist, was erzeugt solche Links.
Wie man sieht ist es kein Percent-Encoding.
Mein Versuch in .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^id=3D4426#p4432$
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426#4432 [R=301,L]führt aber zu
http://forum.bebac.at/mix.php#p4432
Du musst # auch percent-encoden sonst behält der Browser das Fragment für sich.
Du solltest allerdings die Quelle des Übels ausmachen, und diese bereinigen.
mfg Beat
Hi,
RewriteCond %{QUERY_STRING} ^id=3D4426#p4432$
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426#4432 [R=301,L]
Du musst # auch percent-encoden sonst behält der Browser das Fragment für sich.
Wie?
M.E. dürfte der Browser schon beim Request das # (und das nachfolgende 4432) „für sich behalten”, sprich gar nicht erst an den Server senden, das in der RewriteCond aber erwartet wird. (Oder gilt ein # auch als Einleitung eines Kommentars, wenn es nicht am Zeilenanfang steht? Das weiss ich gerade nicht, und bin auch zu faul, es nachzuschlagen ;-)
MfG ChrisB
M.E. dürfte der Browser schon beim Request das # (und das nachfolgende 4432) „für sich behalten”, sprich gar nicht erst an den Server senden, das in der RewriteCond aber erwartet wird. (Oder gilt ein # auch als Einleitung eines Kommentars, wenn es nicht am Zeilenanfang steht? Das weiss ich gerade nicht, und bin auch zu faul, es nachzuschlagen ;-)
Good point!
entweder ist
RewriteCond %{QUERY_STRING} ^id=3D4426#p4432$
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426#4432 [R=301,L]
gleich
RewriteCond %{QUERY_STRING} ^id=3D4426
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426
oder gleich
RewriteCond %{QUERY_STRING} ^id=3D4426#p4432$
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426
mfg Beat
Hallo!
OK, 4432 ist Child-Post vom Parent 4426.
Eigentlich will ich direkt zu http://forum.bebac.at/mix_entry.php?id=4426#p4432
mfg Alfie
Hallo!
RewriteCond %{QUERY_STRING} ^id=3D4426
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426
Funktioniert!
Vielen Dank, Alfie
[latex]Mae govannen![/latex]
M.E. dürfte der Browser schon beim Request das # (und das nachfolgende 4432) „für sich behalten”, sprich gar nicht erst an den Server senden, das in der RewriteCond aber erwartet wird. (Oder gilt ein # auch als Einleitung eines Kommentars, wenn es nicht am Zeilenanfang steht? Das weiss ich gerade nicht, und bin auch zu faul, es nachzuschlagen ;-)
Cü,
Kai
Hallo!
Interessanter ist, was erzeugt solche Links.
Keine Ahnung. Soweit ich weiss ein Apple-Client der auf einem mir unbekannten Mail-Server 'sitzt'.
Du musst # auch percent-encoden sonst behält der Browser das Fragment für sich.
Ja, und wie?
Du solltest allerdings die Quelle des Übels ausmachen, und diese bereinigen.
Kann ich leider nicht. Der falsche Link ist über einen Listserver an ein paar tausend Empfänger gegangen. Also muss ich wohl oder übel bei mir die Anfragen umleiten.
Du musst # auch percent-encoden sonst behält der Browser das Fragment für sich.
Ja, und wie?
Gar nicht. Du kannst das Fragment eigentlich vernachlässigen. Es sollte sowieso nicht gesendet werden, es sei denn es wird percent-encoded als
%23 gesendet, aber dann ist es kein Fragment
Deine Regel sollte schlicht lauten:
RewriteCond %{QUERY_STRING} ^id=3D4426(.*)
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426%1 [R=301,L]
%1 ist eine Referenz auf () in der Condition.
Du solltest allerdings die Quelle des Übels ausmachen, und diese bereinigen.
Kann ich leider nicht. Der falsche Link ist über einen Listserver an ein paar tausend Empfänger gegangen. Also muss ich wohl oder übel bei mir die Anfragen umleiten.
Ist es möglich dass dein Link das Opfer von quoted=
printable geworden ist?
mfg Beat
Hallo!
Deine Regel sollte schlicht lauten:
RewriteCond %{QUERY_STRING} ^id=3D4426(.*)
RewriteRule ^mix_entry.php$ mix_entry.php?id=4426%1 [R=301,L]%1 ist eine Referenz auf () in der Condition.
OK, klar, das ist die sauberste Lösung.
Ist es möglich dass dein Link das Opfer von quoted=
printable geworden ist?
Ja, kann gut sein. Im fernen Oklahoma werkt ein
X-Listserver: Macjordomo 1.6a2 - Macintosh Listserver / ESMTP
Alle Elektrobriefe sind...
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
... aber who knows?
hi,
Von http://forum.bebac.at/mix_entry.php?id=3D4426#p4432
soll auf
http://forum.bebac.at/mix_entry.php?id=4426#p4432
umgeleitet werden (d.h. das hex-kodierte Fragezeichen soll umgewandelt werden).
Hexcodiert ist das '?' => 3F
Das sehe ich hier nirgendwo.
Hotti
Hallo!
Hexcodiert ist das '?' => 3F
Das sehe ich hier nirgendwo.
Oops, stimmt! 3D => '='
Also wird das Fragezeichen im korrekten Link in ein zweites '=' ungewandelt.
mfg Alfie