aus %2F einen / in der URI machen

Apache, Lighttpd, nginx, Cherokee
taurin
Posts: 44
Joined: 2003-11-30 23:41

aus %2F einen / in der URI machen

Post by taurin » 2008-05-28 14:23

Servus,

ein dolles Device (SSL-VPN) in unserem Netz sorgt dafür, dass Requests mit "/" zu "%2F" umgebogen werden. Da kommt dann aber Squirrelmail ausm Tritt (und andere Web-Apps auch) aufm apache.
Ich hab noch nie was mit mod_rewrite gemacht und trotz Sucherei (und ja, ich hab die Doku gelesen) hab ich auch nichts für mich anpassbares gefunden bzw. es selbst nicht hinbekommen.

Ich such also ein mod_rewrite, das die gesamte URL nach %2F durchsucht und durch / ersetzt. Anyone?!

Achja: AllowEncodedSlashes ist leider nicht die Lösung und nein, ich kann das doofe Device nicht einfach tauschen :)

Merci vielmals!

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: aus %2F einen / in der URI machen

Post by Joe User » 2008-05-28 16:38

Mit mod_rewrite kannst Du nur eine feste, keine variable, Anzahl an Vorkommen ersetzen. Daher wirst Du jeden einzelnen möglichen URL auf die jeweilige Anzahl der %2F prüfen und eine RewriteRule anlegen müssen. Für ein paar URL mag sich dieser Aufwand ja noch lohnen, aber so ab 100 URL dürfte das Beheben des eigentlichen Problems billiger und schneller sein.

Die einfachste RewriteRule müsste in etwa so aussehen:

Code: Select all

RewriteRule   ([a-zA-Z0-9_+-])%2F   $1/
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: aus %2F einen / in der URI machen

Post by dotme » 2008-05-28 16:55

Joe User wrote:Mit mod_rewrite kannst Du nur eine feste, keine variable, Anzahl an Vorkommen ersetzen. Daher wirst Du jeden einzelnen möglichen URL auf die jeweilige Anzahl der %2F prüfen und eine RewriteRule anlegen müssen.


Mit dem Flag [N] müsste man eigentlich eine Art Schleife bzw. Rekursion hinbekommen?! Ich habe gerade keinen Apache zum Testen zur Hand, aber ein erster Lösungsansatz könnte so aussehen.

Code: Select all

RewriteRule ^/(.*)%2F(.*)$ $1/$2
RewriteRule ^.*%2F - [N]


Evtl. sind weitere Flags wegen dem escapten Schrägstrich nötig.

taurin
Posts: 44
Joined: 2003-11-30 23:41

Re: aus %2F einen / in der URI machen

Post by taurin » 2008-05-30 14:39

Erstmal danke für Eure Antworten, allerdings passiert weder beim einen noch beim anderen Vorschlag irgendwas, trotz diverserer rumspielereien (mod rewrite ist übrigens enabled :) ). Die URI ist wie folgt aufgebaut:

Code: Select all

http://host/squirrelmail/src/right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox=INBOX%2Fsomething

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: aus %2F einen / in der URI machen

Post by Joe User » 2008-05-30 14:56

Ohne Gewähr:

Code: Select all

RewriteRule   ^(.*)%2F(.*)   $1/$2
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

taurin
Posts: 44
Joined: 2003-11-30 23:41

Re: aus %2F einen / in der URI machen

Post by taurin » 2008-06-02 09:44

Code: Select all

http://host/squirrelmail/src/right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox=INBOX%2Fsomething


ERROR: Could not complete request.
Anfrage: SELECT "INBOX%2Fsomething"
Reason Given: Mailbox does not exist


Achja: Andere rewrites klappen (z. B. http zu https und so). Nur um zu beweisen, dass das mod_rewrite geladen ist :)

Ich würde an sich sagen, dass Eure Vorschläge (nochmal vielen Dank dafür) funktionieren müssten. Meine eigenen Versuche waren ähnlich. Ich raffs im Moment überhaupt nicht.

terx`
Posts: 23
Joined: 2008-04-10 18:58
Location: Südoldenburger Land

Re: aus %2F einen / in der URI machen

Post by terx` » 2008-06-02 12:55

Ich vermute, das %2 von %2F wird als Variable interpretiert. Ich schlage %%2F und %2F mal vor.

taurin
Posts: 44
Joined: 2003-11-30 23:41

Re: aus %2F einen / in der URI machen

Post by taurin » 2008-06-03 10:01

terx` wrote:Ich schlage %%2F und %2F mal vor.

Hatte ich auch schon versucht (aber jetzt nochmal). Leider ohne Erfolg. mod_rewrite erkennt "%2F" einfach nicht. Die Sau :)

Ich hab mal einen "/" in einer OR Bedingung erkennen lassen, den hat er gefressen. Komische Sache das.