2009-09-21 46 views
1

我想有你的关于解决这一具体问题的意见和建议结束URL映射:请对象:一种方法来处理重写以“/”

我有一个RewriteMap指令是需要大量的护理问题是,用户可能会输入以“/”或“/”结尾的虚空网址,两种情况下都不会发生匹配,只有一个匹配,所以我决定先创建一个规则,在“/”,然后让重写映射照顾匹配的...这里是它的外观:

<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

可笑!我发现了第一个bug,iis在默认情况下添加了一个尾部的斜线,当它发现url时,绝对是恶梦! – Ayyash 2009-09-22 02:24:43

回答

3

这wasnt尤其是结尾的斜杠由IIS添加一个很好的解决方案,这里是一个更好的解决方法(请注意在地图键后面的斜线)

<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

非常支持这个网站是,即时淹没 – Ayyash 2009-09-23 05:32:27

2

从接受的答案继它也应该可以同用较少的代码行:

<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

非常好!你也可以省略'trackAllCaptures =“false”'选项,因为这是默认值。 – StockBreak 2014-06-30 10:29:01

相关问题