Posso criar uma “exceção” para um diretório virtual do IIS?

1

Eu tenho uma pasta no meu servidor como esta:

C: \ inetpub \ wwwroot \ blah

No IIS, também tenho uma pasta virtual "/ blah" configurada, apontando para C: \ BLAH

Naturalmente, quando os visitantes do site digitam no link , o IIS procura por C: \ BLAH \ test.html, não C: \ inetpub \ wwwroot \ blah \ test.html. Na maior parte, esse é o comportamento que quero, porque a maioria dos arquivos está em C: \ BLAH. No entanto, quando o arquivo existir em C: \ inetpub \ wwwroot \ blah, eu gostaria que o servidor procurasse primeiro por ele e, em seguida, procure em C: \ BLAH se ele não o encontrar. Basicamente eu gostaria que os arquivos em C: \ inetpub \ wwwroot \ blah fossem uma "exceção" para o diretório virtual. Faça com que o servidor retorne os arquivos dessa pasta, se existirem, mas se eles não os puxarem de C: \ BLAH em vez de retornar um 404.

Estou executando o IIS 5.0 no Windows Server 2000.

Isso é possível? Obrigado.

    
por Joshua Carmody 09.06.2009 / 17:48

3 respostas

1

Este é um tipo de gueto, mas pode ser uma maneira simples de resolver o seu problema.

  • Crie um segundo diretório virtual que aponte para c: \ blah.
  • No diretório virtual "blah" (que aponta para C: \ inetpub \ wwwroot \ blah), configure um manipulador de erros personalizado para erros 404 que seja uma página ASP ou ASP.Net em c: \ inetpub \ wwwroot \ blah \
  • Na página ASP.Net do manipulador 404,
    • puxe o URL solicitado (deve ser a única coisa em Request.QueryString)
    • corte tudo, exceto o nome do arquivo solicitado
    • redirecionar para "/ cblah / FILENAME".

Aqui está um pequeno trecho de código ASP.Net que pode atuar como o manipulador 404:

string qs = Page.Request.QueryString.ToString();
qs = Server.UrlDecode(qs);
int c = qs.LastIndexOf("/");
string filepath = qs.Substring(c+1);
Response.Redirect("/cblah/"+filepath);
    
por 09.06.2009 / 22:07
0

Você provavelmente poderia fazer isso por meio de um filtro ISAPI personalizado, mas não conheço nenhuma maneira no IIS ou em um produto existente que faça exatamente o que está procurando.

    
por 09.06.2009 / 17:55
0

O IIRF é um Rewriter de URL gratuito que tem a capacidade de verificar a existência de um diretório, antes de reescrevê-lo. As regras seriam semelhantes:

# This rule matches, eg, http://server/blah/test.html
# It does "no rewrite" (-) if the file c:\blah\test.html does NOT exist. 
# The url stub /blah must map to an existing vdir. 
RewriteCond  c:\blah\        !-f
RewriteRule  ^/blah/(.*)$      -  [L]

# If the file does exist, rewrite to the alternative vdir. 
RewriteCond  c:\blah\           -f
RewriteRule  ^/blah/(.*)$         /override-vdir/$2    [L]

Você também pode curinga "blah". Para fazer isso, você precisaria de uma convenção para nomear os vdirs de substituição. Seria algo parecido com isto:

# This rule matches, eg, http://server/blah/test.html
# It does nothing if the file c:\blah\test.html does not exist. 
RewriteCond  c:\\           !-f
RewriteRule  ^/([^/]+)/(.*)$    -  [L]

RewriteCond  c:\\            -f
RewriteRule  ^/([^/]+)/(.*)$    /override-$1/$2    [L]

Existem também condições para testar a existência de um diretório. Verifique o doc do IIRF para detalhes.

    
por 15.07.2009 / 04:48