IIS 7.5 URL重写:有没有更好的方法来重写/组合多个规则

时间:2014-04-25 19:59:53

标签: url iis url-rewriting web-config rewrite

我们正在为现有网站构建一个新的基于移动的网站(客户大量使用)。

在这种情况下,当用户从移动设备请求现有Web应用程序上的某些网页时,必须将对现有Web应用程序的请求重定向到新的移动Web应用程序。

总而言之,我们有以下条件 -

  1. 如果网页请求包含查询字符串(jobId),则必须是 重定向到与其他人一起使用的移动网页(JobDtls.aspx) 查询字符串参数名称(jId);但使用相同的查询字符串 值。

  2. 如果网页请求不包含查询字符串,则为 重定向必须是移动网站的default.aspx页面。

  3. 上述条件必须仅在请求通过a时才有效 移动设备。


  4. 对于本任务,我提出了两种不同的重写规则,如下所述。但是,由于我是这个主题的新手,我想知道是否有人可以优化这个配置;可能只有1条规则。

    <rewrite>
    <rules>
    <rule name="Mobile Entry With QueryString" stopProcessing="true">
        <match url="Job.aspx" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_USER_AGENT}" pattern="midp|mobile|phone" />
        <add input="{QUERY_STRING}" pattern="jobid=([0-9]+)$" />
        </conditions>
        <action type="Redirect" url="htps://{HTTP_HOST}/MWeb/mjobitem.aspx?jid={C:1}" rdirectType="Permanent" appendQueryString="false" />
    </rule>
    <rule name="Mobile Entry Without QueryString" stopProcessing="true">
        <match url="Job.aspx" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_USER_AGENT}" pattern="midp|mobile|phone" />
        <add input="{QUERY_STRING}" pattern=".+" negate="true" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/MWeb" redirectType="Permanent" appendQueryString="false" />
    </rule>
    </rules>
    </rewrite>
    

1 个答案:

答案 0 :(得分:0)

首先,您的案例似乎不会受益于任何形式的规则组合。

当您想要避免重定向链接时,“组合”重定向规则特别有意义。您的情况不会导致重定向链接。有关详细信息,请参阅Combine Multiple IIS7 Rewrite Rules (Redirects) Into One(如果链接提供的解决方案仍未完成答案,请特别回答链接)。此外,它并不真正将规则合二为一,它确实允许它们在执行最终结果行动之前运行和累积。

然后,看起来我们不能在同一规则中使用logicalGrouping MatchAll和其他具有logicalGrouping MatchAny的条件,这对于组合两个规则的条件是必需的。另一种方法是详细说明匹配查询字符串条件的更复杂的正则表达式。但这会导致更难理解的东西,所以这对我来说是不可取的。

这仅适用于组合条件。你会遇到另一个麻烦:行动不一样。我认为没有办法表达处理你的两个案件的行动。