alfie: Apache Rewrite

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

  1. 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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. 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

      --
      “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      1. 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

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. 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

        2. Hallo!

          RewriteCond %{QUERY_STRING} ^id=3D4426
          RewriteRule ^mix_entry.php$ mix_entry.php?id=4426

          Funktioniert!

          Vielen Dank, Alfie

      2. [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 ;-)

        Kein Kommentar:
        Zeilen, die mit dem Doppelkreuz "#" beginnen, werden als Kommentare betrachtet und ignoriert. Kommentare dürfen nicht am Ende einer Zeile nach der Direktive eingefügt werden. Leerzeilen und Whitespaces vor einer Direktive werden ignoriert. Dadurch lassen sich Direktiven zur besseren Lesbarbeit einrücken.

        Cü,

        Kai

        --
        Even if you are a master of jQuery, you can only create mediocre (at best)
        scripts. The problem is that the authors you rely on have not mastered the
        DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
        Foren-Stylesheet Site Selfzeug JS-Lookup
        SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
    2. 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.

      1. 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

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. 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?

  2. 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

    1. 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