Eu tenho um site ASP.NET no IIS8, mas o IIS7.5 se comporta exatamente da mesma maneira. Quando eu digito um URL como:
mysite.com/foo/bar..
Eu recebo o seguinte erro com um código de status '500 Internal Server Error':
mesmoqueeutenhapáginasdeerropersonalizadasconfiguradaspara500e404enãovejonadadeerradocomaminhapáginadeerropersonalizada.
Nomeunóweb.configsystem.webeutenhooseguinte:
<customErrorsmode="On">
<error statusCode="404" redirect="/404.aspx" />
</customErrors>
Se eu remover essa seção, recebo uma resposta 404.0 de volta, mas a própria página está em branco.
No web.config system.webServer eu tenho:
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="404.html" responseMode="File" />
</httpErrors>
Mas quer isso esteja lá ou não, recebo a mesma página 404.0 em branco do que a minha página de erro personalizada esperada, ou pelo menos uma mensagem interna do IIS.
Então, primeiro de tudo, porque o manipulador asp.net está pegando um pedido para '..' (também funciona com um ou mais pontos à direita)
Se eu remover o seguinte manipulador de 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" />
Eu recebo minha página 404 personalizada esperada, mas é claro que remover esse manipulador interrompe o roteamento no asp.net entre outras coisas.
Olhando para o traço da falha, vejo:
AautenticaçãodoWindowsestádesativadaparaosite,entãoporqueessemóduloestánopipelinedesolicitação?
Porenquanto,minhacorreçãoéusaromóduloURLRewritecomaseguinteregra:
<rewrite><rules><rulename="Trailing Dots" stopProcessing="true">
<match url="\.+$" />
<action type="Rewrite" url="/404.html" appendQueryString="false" />
</rule>
</rules>
</rewrite>
Isso funciona bem, mas me pergunto por que o IIS / ASP.NET se comporta dessa maneira?