Ich schreibe eine Webanwendung, die dynamisch URLs erstellt, die auf einer Eingabe basieren und von einem Client zu einem anderen Zeitpunkt konsumiert werden. Zur Diskussion können diese URLs bestimmte Zeichen enthalten, wie einen Schrägstrich (d. H. '/') , der nicht als Teil der eigentlichen URL, sondern nur als Argument interpretiert werden sollte. Zum Beispiel:
%Vor%Wie Sie sehen, enthält ArgumentTo / Url / GoesHere zwar Schrägstriche, diese sollten jedoch ignoriert oder ignoriert werden .
Dies mag ein schlechtes Beispiel sein, aber die Frage ist allgemeiner und trifft auf andere Sonderzeichen zu .
Nachdem ich einige Antworten erhalten hatte, wurde mir klar, dass ich einige Stücke nicht gezeigt habe, die hoffentlich zur Klärung beitragen werden.
Ich möchte diese Sprache ziemlich agnostisch halten, da es großartig wäre, wenn der Kunde nur eine Anfrage stellen könnte. Wenn der Client beispielsweise gewusst hat, dass er ArgumentTo / Url / GoesHere übergeben möchte, wäre es großartig, wenn das in encodiert codiert werden könnte > Zeichenfolge, in der der Server sich drehen und decodieren verwenden kann.
Können wir davon ausgehen, dass ähnliche Funktionen wie HttpUtility.HtmlEncode / HtmlDecode im .NET Framework auf anderen Systemen / Plattformen verfügbar sind? Die URL muss nicht pretty sein, also ist es nicht wirklich wichtig, echte Wörter im Pfad zu haben.
Es scheint, dass die base64-Kodierung / Dekodierung ziemlich leicht auf jeder Plattform / Sprache verfügbar ist.
Sie haben nicht gesagt, welche Sprache Sie verwenden, aber PHP hat die nützliche Funktion urlencode
und C # hat HttpUtility.URLEncode
und Server.UrlEncode
, die Teile Ihrer URL gut verschlüsseln sollen.
Falls Sie einen anderen Weg brauchen diese Seite hat eine Liste von codierten Werten. Zum Beispiel: / == %2f
.
Nach dem, was Sie aktualisiert haben, würde ich Voyagerfans Idee von URLRewriting verwenden, um etwas wie:
zu machen %Vor%Und dann benutze den GET-Parser der Anwendung, um ihn herauszufiltern.
Sie können Apache überschreiben verwenden, um http:// mycompany.com/PartOfUrl1/PartOfUrl2
in http:// mycompany.com/path/to/program.php
umzuschreiben und dann zu übergeben in ArgumentTo/Url/GoesHere
als Standard-GET-Parameter. Was der Server tatsächlich zurücksendet, ist die Antwort für http:// mycompany.com/path/to/program.php?arg=ArgumentTo/Url/GoesHere
Das Umschreiben ist eine gute Methode, um sich vor technologischen Änderungen zu schützen (so wird beispielsweise der Wechsel von PHP zu ASP Ihre URLs nicht ändern) und Ihren Benutzern gleichzeitig benutzerfreundliche URLs zur Verfügung stellen.
Wenn Sie Ihre Beispiel-URLs verwenden und aufbauend auf dem, was ich vorher gesagt habe, würde ich sagen, dass Sie diesen Code in Ihrer httpd.conf oder .htaccess verwenden:
RewriteEngine On
RewriteRule http:// mycompany.com/PartOfUrl1/PartOfUrl2/([A-Za-z0-9]) http://mycompany.com/path/to/program.php?arg=
(Entfernen Sie das Leerzeichen nach dem ersten http://
in RewriteRule
, und diese Zeile muss no Zeilenumbrüche enthalten.)
Das Ändern der Pfade, der Dateinamen, der Name des Arguments usw. ist in Ordnung; Die kritischen Teile sind hier die Regex ( ([A-Za-z0-9])
) und die .
Ja, Base64-Codierung für Ihr Argument funktioniert für Sie, Sie müssen jedoch sicherstellen, dass Ihre gesamte URL unter der Größenbeschränkung Ihres Zielbrowsers liegt (2083 Zeichen für IE 4 - 7, nach dieser Seite ).
Ich glaube, was Sie suchen, wenn Sie .net verwenden, ist die HttpUtility.EncodeUrl () -Methode, da sie viele Überschreibungen hat. Schau hier: Ссылка
Tags und Links base64