2009-09-21 2 views
1

Je voudrais avoir votre avis et suggestion concernant la solution à ce problème spécifique:s'il vous plaît: une façon de gérer réécrire les urls de carte qui se terminent par «/»

J'ai un RewriteMap qui prend soin de beaucoup des URL de vanity, le problème est, les utilisateurs peuvent entrer cette URL de vanité se terminant par un "/" ou non "/", la correspondance ne se produit pas dans les deux cas, un seul est apparié, donc j'ai décidé de créer une règle le «/» puis laissez la carte de rewrite prendre soin de la mise en correspondance ... voici à quoi il ressemble:

<rewrite> 
<rules> 
    <rule name="ReduceLast" stopProcessing="true"> 
    <match url="^.+(?=/+$)"/> 
    <action type="Redirect" url="{R:0}" redirectType="Permanent"/> 
    </rule> 
    <rule name="Redirect Rule" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
    <add input="{StaticRedirects:{URL}}" pattern="(.+)" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}" appendQueryString="False" redirectType="Permanent" /> 
    </rule> 
</rules> 
<rewriteMaps> 
    <rewriteMap name="StaticRedirects"> 
    <add key="/australia/download" value="http://www.example.com/australia/trial-software.aspx" /> 
    </rewriteMap> 
</rewriteMaps> 
</rewrite> 
+0

rediculous! J'ai trouvé le premier bug, iis ajoute un slash par défaut quand il trouve l'URL, cauchemar absolu !!! – Ayyash

Répondre

3

qui était pas une excellente solution en particulier que par iis sont ajoutés slash final, voici une une meilleure solution de contournement (notez le slash dans la clé de carte)

<rewrite> 
<rules> 

    <rule name="Redirect Rule" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
     <add input="{StaticRedirects:{URL}}" pattern="(.+)" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}" appendQueryString="False" redirectType="Permanent" /> 
    </rule> 
    <rule name="Redirect Rule2" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
     <add input="{StaticRedirects:{URL}/}" pattern="(.+)" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}" appendQueryString="False" redirectType="Permanent" /> 
    </rule> 
</rules> 
<rewriteMaps> 
<rewriteMap name="StaticRedirects"> 
<add key="/australia/download/" value="http://www.example.com/australia/trial-software.aspx" /> 
</rewriteMap> 
</rewriteMaps> 
</rewrite> 
+0

très favorable ce site est, im accablé – Ayyash

2

À la suite de la réponse acceptée est devrait également être possible de la même chose avec moins de lignes de code:

<rewrite> 
     <rules> 
     <rule name="Redirect Rule" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> 
      <add input="{StaticRedirects:{URL}}" pattern="(.+)" /> 
      <add input="{StaticRedirects:{URL}/}" pattern="(.+)" /> 
      </conditions> 
      <action type="Redirect" url="{C:1}" appendQueryString="False" redirectType="Permanent" /> 
     </rule> 
     </rules> 
     <rewriteMaps> 
     <rewriteMap name="StaticRedirects"> 
      <add key="/australia/download/" value="http://www.example.com/australia/trial-software.aspx" /> 
     </rewriteMap> 
     </rewriteMaps> 
    </rewrite> 
+0

Très agréable! Vous pouvez également omettre l'option 'trackAllCaptures =" false "' car il s'agit de la valeur par défaut. – StockBreak