IIS 7 und + in URLs

Ich hab gerade nach einem Fehler suchen müssen, der Plus-Zeichen in URLs betrifft. “Früher” (IIS 6) hat’s noch so funktioniert wie es funktionieren sollte. %20 ist der Code für ein Leerzeichen, aber auch + kann für ein Leerzeichen angegeben werden (warum auch immer). Auf dem Server wird dies wieder dekodiert und entsprechend verwertet. Wollte man, dass der Server ein Plus-Zeichen, statt einem Leerzeichen übergeben bekommt, so musste man das + entsprechend mit %2B codieren.

Im IIS 7 wurde aber aus %2B kein +, sondern es kam zu einer Fehlermeldung (File not found). Auch bei %252B (%25 ist das %-Zeichen selbst) kommt es zu diesem Fehler.

In der erweiterten Fehlermeldung eines lokalen IIS 7.0 steht es dann genauer drin. Hier wurden erweiterte Sicherheitsmechanismen erdacht, die (in diesem Fall) Schutz vor dem so genannten double encoding bieten sollen. Um diesen Schutz abzuschalten und damit wieder ein + in Dateinamen angeben zu können, muss man in die entsprechende web.config folgendes eintragen.

1
2
3
4
5
6
7
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
</configuration>

Natürlich nur, wenn’s nicht anders geht und man dieses Feature dringend oder gar zwingend braucht!
Wer im Besitz des Adminstration Packs for IIS 7.0 ist, findet die Einstellung unter “Request Filtering”,

… “Edit Feature Settings…”,

… und dort unter dem Namen “Allow double escaping”.