2011-01-05 17 views
7

Wysyłamy zakodowany kod HTML w ciągu zapytania. To działało dobrze na IIS 6 (Windows 2003). Niedawno przenieśliśmy witrynę do systemu Windows 2008 (IIS 7.x). Ponieważ przeniesienie dowolnego ciągu zapytania zawierającego znak "+", tj. "% 2b", powoduje błąd na serwerze "404 - Nie znaleziono pliku lub katalogu".Problem z symbolem "+" w adresie URL w IIS 7.x

Każda pomoc?

Pozdrawiamy.

+0

Znaleziono jeden roztwór w ServerFault http://serverfault.com/questions/76013/iis6-vs-iis7-and-iis7-5-handling-urls-with-plus-sign-in -base-not-querystri – Kashif

+0

To rozwiązanie odnosi się do znaku plus w bazowym adresie URL, a nie do zapytania o znak zapytania. Czy możesz wyjaśnić, czy + rzeczywiście odnosi się do spacji lub plusa w adresie URL pliku? "+" (zakodowany) oznacza spację. "% 2b" oznacza +. –

+0

"+" oznacza Plus i zakodowane do "% 2b" – Kashif

Odpowiedz

5
+0

To zawierało rozwiązanie dla mnie - okrzyki! – stephen

+0

To rozwiązanie działa, ale tylko wtedy, gdy zainstalowany jest moduł URL Rewrite. W przeciwnym razie dostaniesz nieprzyjemnego "Błąd HTTP 500.19 - Błąd wewnętrznego serwera Nie można uzyskać dostępu do żądanej strony, ponieważ powiązane dane konfiguracyjne strony są nieprawidłowe." błąd. Tylko głowa. –

+0

Miałem ten problem z # zarejestrować nazwę pliku i działa dla mnie. – Alireza

0

Można zmienić + do 20% przy kodowaniu do obsługi to programowo, przy założeniu, że masz kontrolę nad kodem, który produkujących adresy URL.

+0

Zakodowane '+' jest takie samo jak zakodowane '% 20', ale niekodowane' + 'zakodowane jako'% 2b' nie jest takie samo. – Guffa

+1

Być może źle zrozumiałem to pytanie - myślałem, że problem polega na tym, że IIS nie zajmuje się + przestrzenią. Jeśli rzeczywiście ma znak plusa jako część adresu URL pliku, to musiałby być zakodowany jako% 2b (a więc powinien i tak pracował), ponieważ + oznacza spację w ciągu zapytania. –

7

Powodem, dla którego występuje ten błąd, jest fakt, że IIS7 wprowadził nowe reguły filtrowania adresów URL ze względów bezpieczeństwa. Tak więc znak "+" jest domyślnie blokowany ze względów bezpieczeństwa w adresie URL.

Aby rozwiązać ten problem, musisz ustawić allowDoubleEscaping = "true" w plikach web.config. Oto znacznik do tego.

<system.webServer> 
<security> 
    <requestFiltering allowDoubleEscaping="true"> 
    </requestFiltering> 
</security> 

Powiązane problemy