Depois de muita investigação, acho que há um bug no instalador do aplicativo da web ou no próprio IIS. Porque eu estou preso com os instaladores de aplicativos web por enquanto, aqui está como eu cheguei:
- Mover a pasta padrão do IIS para
C:\inetpub\wwwroot
(esse é o padrão de qualquer maneira) - Defina os pools de aplicativos para todo o site e
static
para ser o mesmo- O IIS não permite a regravação de URLs nos pools de aplicativos. Se isso é uma preocupação - você teria que configurar um proxy reverso completo.
- Instalou o plug-in de regravação de URL do IIS
- Criei uma nova regra de regravação de URL com o padrão de correspondência
(/*)(.*)
- Condições adicionadas à regra da seguinte forma (corresponde a todas)
- Entrada
{URL}
Não corresponde a^(/*)app1/(.*)
- Entrada
{URL}
Não corresponde a^(/*)app2/(.*)
- ... Um para cada aplicativo ... (sim, é uma dor)
- Entrada
- Defina a ação para reescrever para
/static/{R:2}
No meu caso, não precisei de nenhuma regra de saída (ou seja, não precisei de um proxy reverso inteiro) porque meus apps retornam URLs válidos.
O interessante dessa solução é que ela é totalmente transparente para o usuário, e os links existentes que começam com / (por exemplo, ...a href="/images/file.jpg"...
) continuarão funcionando porque, quando o usuário final solicitar /images/file.jpg
, a URL será reescrito internamente para /static/images/file.jpg
.
A principal desvantagem é que eu tenho que manter a lista de padrões de correspondência atualizada com todos os pools de aplicativos. Mas no meu caso isso não é grande coisa. Eu poderia realmente automatizar a injeção de novas sequências de padrões no arquivo web.config
- mas isso não é grande coisa no meu caso.
Outra desvantagem é que o usuário pode ver links para /static/images/...
no código-fonte, mas não me importo com isso.
Então - espero que isso ajude alguém no futuro.