mod_rewrite Sonderzeichen
jakkob
- webserver
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
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
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
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
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
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
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!