IIS Reconfigurar, reescrever mapas e consultar strings

10

Por favor, ajude-me a entender os mapas de reescrita, eu tenho esta configuração:

<rewriteMap name="MyMap">
   <add key="/pages" value="/website/pages/index.aspx" />
   <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" />
   <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" />
</rewriteMap>

Aqui está minha regra:

<rule name="Rewrite rule for MyMap" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" />
   </conditions>
   <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

Isso está funcionando se eu tentar acessar essas páginas:

  • www.mydomain.com/pages (OK)
  • www.mydomain.com/pt/pages/page-1 (OK)
  • www.meudominio.com/pages/page-1/section-1 (OK)

Mas quero a possibilidade de adicionar uma string de consulta em qualquer uma dessas páginas, por exemplo:

  • www.mydomain.com/pt/pages?page=1 (FAIL)

Quando tento acessar esta página, recebo um 404. Como posso fazer isso funcionar?

    
por Martin 21.10.2011 / 11:30

2 respostas

12

Por padrão, as regras de reconfiguração de URL que usam mapas de reescrita são criadas correspondentes à variável {REQUEST_URI} . Isso inclui a URL + a string de consulta. Isso permite que você corresponda a URLs com parâmetros de string de consulta e os reescreva em outras páginas. Muito útil, mas aparentemente não é o que você quer / precisa.

Você deseja corresponder apenas ao URL, sem a string de consulta. Para alterar isso, você precisa substituir {REQUEST_URI} na condição de {URL} . Então, somente a URL (sem string de consulta) será comparada com o mapa de reescrita. Você pode então adicionar a string de consulta à URL reescrita para que o script executado ainda tenha acesso a ela.

Você acaba com uma regra como:

<rule name="Rewrite rule for MyMap">
    <match url=".*" />
    <conditions>
        <add input="{MyMap:{URL}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>
    
por 22.10.2011 / 11:24
2

Em vez de usar

<add input="{MyMap:{URL}}" pattern="(.+)" />

você também pode tentar

<add input="{MyMap:{SCRIPT_NAME}}" pattern="(.+)" />

Veja aqui:

Não é possível obter redirecionamentos estáticos para funcionar com o IIS Url Rewrite 2.0

    
por 02.11.2011 / 20:05

Tags