J'ai un site ASP.NET sur IIS8, mais IIS7.5 se comporte exactement de la même manière. Lorsque j'entre une URL comme :
mysite.com/foo/bar..
J'obtiens l'erreur suivante avec un code d'état "500 Internal Server Error" :
même si j'ai des pages d'erreur personnalisées pour 500 et 404 et que je ne vois rien d'anormal dans ma page d'erreur personnalisée.
Dans mon nœud web.config system.web, j'ai ce qui suit :
<customErrors mode="On">
<error statusCode="404" redirect="/404.aspx" />
</customErrors>
Si je supprime cette section, j'obtiens une réponse 404.0, mais la page elle-même est vide.
Dans web.config system.webServer j'ai :
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="404.html" responseMode="File" />
</httpErrors>
Mais que ce soit là ou non, j'obtiens la même page blanche 404.0 au lieu de la page d'erreur personnalisée que j'attendais, ou au moins un message interne d'IIS.
Tout d'abord, pourquoi le handler asp.net prend-il en compte une requête pour " " (fonctionne également avec un ou plusieurs points à la fin) ?
Si je supprime le gestionnaire suivant du fichier applicacationHost.config :
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
J'obtiens la page 404 personnalisée attendue, mais bien sûr la suppression de ce gestionnaire casse le routage dans asp.net entre autres choses.
En regardant la trace de l'échec, je vois :
L'authentification Windows est désactivée pour le site, alors pourquoi ce module se trouve-t-il dans le pipeline de requêtes ?
Pour l'instant, ma solution consiste à utiliser le module URL Rewrite avec la règle suivante :
<rewrite>
<rules>
<rule name="Trailing Dots" stopProcessing="true">
<match url="\.+$" />
<action type="Rewrite" url="/404.html" appendQueryString="false" />
</rule>
</rules>
</rewrite>
Cela fonctionne bien, mais je me demande pourquoi IIS/ASP.NET se comporte ainsi.