2016-04-01 1 views
4

Je veux rediriger quelques pages d'un ancien site (oldsite.com) à un nouveau site Web selon les règles suivantes (de newsite *.):IIS URL Rewrite annule les conditions de travail ne

  • Tout premier niveau les enfants (/ sv,/no,/da, etc.) doivent rediriger vers leurs homologues respectifs, ie newsite.se, newsite.no, newsite.dk, etc.
  • Tous les autres enfants/descendants doivent rediriger vers la racine du nouveaux sites aussi, sauf/page1 et/page2 et ses descendants.

Pour cela, je l'ai créé les règles suivantes (pour sv dans ce cas):

<rule name="Redirect /sv to .se" stopProcessing="true"> 
    <match url="^sv/?$" /> 
     <action type="Redirect" url="http://newsite.se" /> 
</rule> 
<rule name="Redirect /sv/* except some pages" stopProcessing="true"> 
    <match url="^sv/.+" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_URI}" pattern="^sv/page1(.*)" negate="true" /> 
     <add input="{REQUEST_URI}" pattern="^sv/page2(.*)" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://newsite.se" /> 
</rule> 

La première règle fonctionne très bien, mais pas la seconde. Le problème est que mes conditions négatives ne semblent pas fonctionner. Quand je rentre oldsite.com/sv/page1 je suis toujours redirigé vers newsite.se. Peut-être ai-je mal compris comment fonctionnent les conditions niées, mais la deuxième règle ne devrait-elle pas exécuter l'action si et seulement si les deux conditions sont vraies (évaluer à faux), ie le REQUEST_URI ne correspond pas match/page1 et/page2?

Répondre

5

Vous comprenez très bien le concept.

Le seul problème est que le {REQUEST_URI} commence toujours par un /, et l'URL ne correspond jamais à un modèle comme ^sv/page1(.*), enfin vous avez un tout nouveau faux positif. Par conséquent, vous devez inclure des barres obliques dans le motif.

<add input="{REQUEST_URI}" pattern="^/sv/page1(.*)" negate="true" /> 
<add input="{REQUEST_URI}" pattern="^/sv/page2(.*)" negate="true" />