2012-06-15 20 views
12

Sto usando il codice web.config sotto per reindirizzare le richieste alle pagine mancanti a una pagina di errore 404 movimentazione:404 reindirizzamento per le pagine non aspx

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="404.aspx"/> 
</customErrors> 

Funziona bene quando guardo per le pagine, come "mancante .aspx "ma non funziona per le pagine senza l'estensione" .aspx "come" missing.asp "o semplicemente" mancante ". Quando non funziona, carica solo una pagina di errore standard di IIS 7.5.

Cosa sto sbagliando? Sto usando .net 4. Ho notato che altre persone facevano la stessa domanda ma non hanno avuto risposta.

Grazie!

+0

provare a rimuovere 'redirectMode = "ResponseRewrite"' – Damith

+0

Ho provato ad utilizzare le informazioni in questa domanda, ma era non è in grado di farlo andare. Saresti così gentile da dare un'occhiata a http://stackoverflow.com/questions/25798775/web-config-not-forwarding-to-404-error-page-on-non-aspx-pages – JGallardo

risposta

9

Come dbaseman afferma che questo è perché i gestori asp.net non sono chiamati per i file non ASP.NET. Un modo semplice per forzare il gestore di asp.net a operare su tutte le richieste è impostare quanto segue nel web.config.

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
</system.webServer> 

Questo dice IIS a correre attraverso tutti i moduli gestiti per tutte le richieste, come .html, .jpg, css, js, ecc Questo è in genere visto di buon occhio in quanto solo introduce elaborazione supplementare e la latenza .

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

Un'altra opzione da provare (più pulito di quanto sopra) è stato inviato come una risposta qui: https://stackoverflow.com/a/6661699/701062

+1

L'ultima opzione che hai citato ha risolto il mio problema. Grazie! – Osprey

+0

Ho provato a usare quello che hai scritto ma non sono riuscito a farlo funzionare. ti dispiacerebbe dare un'occhiata a http://stackoverflow.com/questions/25798775/web-config-not-forwarding-to-404-error-page-on-non-aspx-pages – JGallardo

+0

Ti amo ... così molto Gary S. – BossWalrus

4

Il motivo è che le estensioni non ASPX non vengono mai inviate al gestore ASP.NET; quegli errori che vedi provengono da IIS. C'è una sezione separata httpErrors sotto system.webServer in web.config che sarà necessario configurare per gestire questi errori. Vedi here per maggiori informazioni.

Esempio dal link:

<configuration> 
    <system.webServer> 
     <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" > 
     <remove statusCode="500" /> 
     <error statusCode="500" 
      prefixLanguageFilePath="C:\Contoso\Content\errors" 
      path="500.htm" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 
+0

Ho aggiunto il codice di seguito ma ora anziché eseguire la pagina di gestione degli errori, visualizza il codice sorgente della pagina (quando si tenta di caricare una pagina non aspx non esistente). ' ' – Osprey

+2

Questa è la risposta migliore in quanto non si basa sull'invio di tutte le richieste tramite la pipeline ASP.NET. @Osprey - questo è dovuto al fatto che errorMode è impostato su "DetailedLocalOnly" Questa impostazione dice, hey, se la richiesta proviene dalla macchina che ospita i file, fornisce alcune informazioni dettagliate, altrimenti mostra la pagina 500 che ho definito. Questo è utile nel debug degli scenari. Puoi cambiare questa impostazione in "Personalizzato" e visualizzerà sempre il messaggio di errore amichevole. – Tommy

+0

Questo non funziona. E perché hai aggiunto per 505 quando la domanda riguardava specificamente l'errore 404? – JGallardo

Problemi correlati