Pergunta

Estou usando o UrLrewritingNet na Umbraco para fazer uma reescrita básica de URL dos URLs de produtos e categorias. Tudo está bem na minha máquina local (Visual Studio Dev-WebServer) e em nosso servidor de desenvolvimento interno (Window Server 2008 com ISS 7, 32 bits). Mas ele falha no servidor de produção, que é o Window Server 2008 R2 com o IIS 7 (64 bits). O sintoma é que a regra de reescrita não é acionada. O servidor simplesmente me dá um erro 404.

A regra de reescrita é assim:

<add name="CategoryRewrite"
     virtualUrl="^/products/(.*)/(.*).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/default.aspx?umbPage=1&amp;maincategory=$1&amp;subcategory=$2"
     ignoreCase="true"/>

O URL se parece com o seguinte - isso não funciona:

http://example.net/products/category+name/sub+category.aspx

Se eu mudar o URL para o seguinte, ele funciona em todos os três ambientes:

http://example.net/products/category%20name/sub%20category.aspx

É claro que o regex no atributo virtualurl falha quando o + é usado para o caractere espacial. Mas devo admitir que posso descobrir por que o Regex falha apenas no servidor Windows 2008 R2.

Estou procurando informações sobre quais diferenças entre o Windows Server 2008 R2 e os outros 2 ambientes. O que devo procurar?

Confirmei que o System.Web.ReGularexpressions.dll é a mesma versão nos servidores.

Foi útil?

Solução

O problema é que o filtro de solicitação do IIS7 rejeita URLs contendo + caracteres. A solução é adicionar o seguinte a você web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration> 

Para mais detalhes: http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx

Um colega de trabalho teve a brilhante idéia de administrar o site por conta própria. E então o erro foi definido ainda como um 404.11 e a partir daí em uma solução foi simples.

Outras dicas

Isso me parece estranho porque seu regex corresponde também aos personagens '+'. Talvez o problema seja por causa do primeiro caractere no regex, iniciante da string '^' que você está usando. Talvez no servidor de produção você obtenha um URL absoluto e em seu servidor de ambiente de desenvolvimento um URL relativo passou para o módulo de reescrita.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top