URL IIS7 quebras de reescrita para URLs contendo caracteres +

6

Eu tenho um servidor IIS7 que age como um proxy reverso para vários outros servidores da web. Os outros servidores são executados em portas diferentes, portanto, o servidor IIS7 fornece 'URLs amigáveis' e tudo na porta 80. A regravação de URL é usada para entregar a solicitação para o servidor de backend.

Um desses servidores é o TeamCity (integração contínua e servidor de compilação). Este servidor fornece uma maneira de baixar os resultados de uma construção ('artefatos de construção'). Normalmente, esses artefatos são um arquivo zip. Aqui está um exemplo de URL:

http://build.teamserver.tigranetworks.co.uk/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip

Os caracteres + em ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip são, na verdade, espaços no nome do arquivo final; o servidor TeamCity coloca os caracteres +.

Quando este link é clicado, recebo o seguinte erro do servidor IIS7 :

404 - File or directory not found.

The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

O URL real que aparece no arquivo de log do IIS7 é:

/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip

A regra de regravação corresponde ao padrão (.*) e reescreve o URL usando

http://localhost:8022/{R:1}

Agora aqui é o interessante. Se eu voltar ao meu navegador e editar esses caracteres +, cuidadosamente substituindo-os por espaços, o URL funcionará!

Concluo que a regravação de URL não funciona de forma alguma para esses caracteres +. Isso é um problema conhecido? Alguma sugestão?

    
por Tim Long 18.07.2011 / 11:01

2 respostas

3

O símbolo '+' não é realmente uma codificação de URL válida para um espaço. O TeamCity deve codificá-los como% 20.

De qualquer forma, o erro é provavelmente o resultado de um comum no IIS7.

Tente o seguinte comando:

%windir%\system32\inetsrv\appcmd set config /section:requestfiltering /allowdoubleescaping:true

Ele deve impedir que o IIS retome os 404s para qualquer coisa com um + na URL.

    
por 24.07.2011 / 09:30
5

Como o h0tw1r3 já respondeu, você precisa desativar a validação do URL.

Se você quiser fazer isso no nível do servidor IIS , use o comando abaixo:

%windir%\system32\inetsrv\appcmd set config /section:requestfiltering /allowdoubleescaping:true

Se você quiser desabilitá-lo somente no nível de aplicativo , será necessário apenas adicionar a seguinte seção ao seu arquivo web.config:

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>
</system.webServer>
    
por 07.11.2012 / 15:16