2011-01-05 3 views
7

Stiamo inviando una stringa codificata HTML nella stringa di query. Sta funzionando bene su IIS 6 (Windows 2003). Recentemente abbiamo spostato il sito Web in Windows 2008 (IIS 7.x). Poiché sposta qualsiasi stringa di query che contiene il segno "+", "% 2b" restituisce un errore sul server "404 - File o directory non trovati.""+" problema di simbolo nell'URL in IIS 7.x

Qualsiasi aiuto?

Cordiali saluti.

+0

Trovato un'unica soluzione su Serverfault http://serverfault.com/questions/76013/iis6-vs-iis7-and-iis7-5-handling-urls-with-plus-sign-in -base-not-querystri – Kashif

+0

Questa soluzione si riferisce a un segno più nell'URL di base, non alla querystring. Puoi chiarire se il + si riferisce effettivamente a uno spazio, o un plus, nell'URL del file? "+" (codificato) significa spazio. "% 2b" significa +. –

+0

"+" si riferisce a Plus e codificato a "% 2b" – Kashif

risposta

5
+0

Quello conteneva la soluzione per me - evviva! – stephen

+0

Questa soluzione funziona ma solo se è installato il modulo di riscrittura dell'URL. In caso contrario, si verificherebbe un "Errore HTTP 500.19 - Errore interno del server Impossibile accedere alla pagina richiesta perché i relativi dati di configurazione per la pagina non sono validi." errore. Solo un avviso. –

+0

Ho avuto questo problema con # nel nome del file, e funziona per me. – Alireza

0

È possibile modificare il + al% 20 durante la codifica per gestire questa situazione a livello di codice, partendo dal presupposto che si ha il controllo sul codice che sta producendo gli URL.

+0

Il '+' codificato è uguale al '% 20' codificato, ma il' + 'non codificato che è codificato come'% 2b' non è lo stesso. – Guffa

+1

Forse ho frainteso la domanda: pensavo che il problema fosse che IIS non gestiva + come spazio. Se ha effettivamente un segno più come parte di un URL di file, allora dovrebbe essere codificato come% 2b (e quindi dovrebbe aver funzionato comunque) poiché + significa spazio in una stringa di query. –

7

Il motivo per cui si sta affrontando questo errore è che IIS7 ha introdotto nuove regole di filtro URL per motivi di sicurezza. Quindi il segno '+' è bloccato per impostazione predefinita come parte del motivo di sicurezza nell'URL.

Per risolvere questo problema, è necessario impostare allowDoubleEscaping = "true" nei file web.config. Ecco il tag per farlo.

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