jakkob: mod_rewrite Sonderzeichen

Heyho,

ich möchte gerne auf meiner Webseite einen PHP-Proxy über CURL einbinden. Klappt auch wunderbar. Nur fänd ich es toll, wenn die User, anstatt in ein Formular eintippen zu müssen, die URL direkt in die Adresszeile tippen könnten. Hier die rewriteRules (per htaccess direkt im entspr. Verzeichnis):

RewriteRule ^(www.*) proxy/browse.php?u=http://$1 [NC,L,QSA]
RewriteRule ^(http.*) proxy/browse.php?u=$1 [NC,L,QSA]

Also leitet zB dies die User über meinen PHP-Proxy auf google:

www.meinedomain/www.google.de

Auch das funktioniert schon. Aber wenn die URL jetzt mitt http:// anfängt, dann greifen meine RewriteRules nicht, also:

www.meinedomain/http://www.google.de

geht nicht mehr.

Ich habe über die rewriteLogs schon rausbekommen, dass der Doppelpunkt der Spielverderber ist. Aber meine User sollen ja auch nicht http%3A%2F%2F eintippen müssen.

Kann ich also irgendwie intern die URL escapen/in ASCII umwandeln und dann die rewriteRules drüberlaufen lassen?

Vielen Dank,
Jakob

  1. Kann ich also irgendwie intern die URL escapen/in ASCII umwandeln und dann die rewriteRules drüberlaufen lassen?

    Konvertiere eine IRI ach URI. Das ist immer noch der sichere Weg.
    -> JS: encodeURI(), encodeURIComponent()

    Im Locationbar hast du keinen Einfluss.
    Der Locationbar akzeptiert zwar IRIs als Eingabe und konvertiert diese zu URIs bei submit.
    Wenn das Zeichenencoding einer Seite UTF-8 ist stellt ein Browser im Locationbar auch die Adresse der aktuellen Seite als IRI dar.
    (hängt allerdings von der Browser config ab!)

    Wenn du aber via JS eine Eingabe submitten willst so musst du die Eingabe entsprechend encoden.

    Sofern du IDN akzeptierst, müssen diese vor der Verwendung in einer URI durch Punycode dargestellt werden.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Heyho,
      [/code]

      Konvertiere eine IRI ach URI. Das ist immer noch der sichere Weg.
      -> JS: encodeURI(), encodeURIComponent

      Das das der sichere Weg ist, das versteh ich. Bloß leider will meinen Usern ja ermnöglichen direkt in die Locationbar zu tippen...

      Der Locationbar akzeptiert zwar IRIs als Eingabe und konvertiert diese zu URIs bei submit.

      Kann ich denn hier nicht irgendwie ansetzen?

      Bisher bin ich soweit, dass mod_rewrite sich einfach komplett weigert anzuspringen. Wenn ich zB

      www.meinedomain/http://www.google.de

      oder auch nur

      www.meinedomain/http:

      eingebe, dann springt diese rewriteRule

      RewriteRule ^(http.*) proxy/browse.php?u=$1 [NC,L,QSA]

      nicht mal an, soll heißen, es wird nix, aber auch gar nix, ins Log geschrieben :-(

      Kann ich denn nicht zB, da da Punycode erwähnst, die angefragte URI immer in Punycode umwandeln und dann meine regulären Ausdrücke auch in Punycode schreiben?

      Oder, noch einfach die angefragte URI erst mit Punycode und dann zurück nach UTF-8 umwandeln.

      Wie gesagt, es würde mir erstmal schon reichen, wenn ich

      in mod_rewrite aus

      www.meinedomain/http://www.google.de

      http://google.de

      extrahieren könnte.

      Danke,
      Jakob

      1. Bisher bin ich soweit, dass mod_rewrite sich einfach komplett weigert anzuspringen. Wenn ich zB

        Weil die Eingabe im Location-Bar
          http://www.example.com/http://www.google.de
        gar nicht an deinen Server gesendet wird, sondern an google.
        Der Browser muss schon verstehen, dass dies eine gültige http uri ist.

        Verwende übrigens für Beispiele die Domain  example.org !

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Hi,

          Weil die Eingabe im Location-Bar
            http://www.example.com/http://www.google.de
          gar nicht an deinen Server gesendet wird, sondern an google.

          In welchem Browser beobachtest du dieses Verhalten?

          In eigentlich allen meinen Testbrowsern bekomme ich eine 404 Not Found-Antwort vom Server, der sich selbst als „Apache/2.2.3 (CentOS) Server at www.example.com Port 80“ ausweist;
          Lediglich Chrome meldet mir, „Oops! This link appears to be broken. Did you mean: www.google.de?“

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          1. Weil die Eingabe im Location-Bar
              http://www.example.com/http://www.google.de
            gar nicht an deinen Server gesendet wird, sondern an google.

            In welchem Browser beobachtest du dieses Verhalten?

            In eigentlich allen meinen Testbrowsern bekomme ich eine 404 Not Found-Antwort vom Server, der sich selbst als „Apache/2.2.3 (CentOS) Server at www.example.com Port 80“ ausweist;
            Lediglich Chrome meldet mir, „Oops! This link appears to be broken. Did you mean: www.google.de?“

            Ich habe in den Browser den vom Poster notierte URI verwendet, hier aber example.org geschrieben.

            Firefox 3.6.3

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. Heyho,

              sorry für die Konfusion: www.meindedomain.de steht natürlich exemplarisch für eine domain mit der ich arbeite und deren Namen ich noch nicht posten will weils halt noch fertig ist...

              Und die Anfrage www.meinedomain.de/http://www.google.de wird natülich nicht an google gesendet, sondern an meinedomain.de!