我们正在为现有网站构建一个新的基于移动的网站(客户大量使用)。
在这种情况下,当用户从移动设备请求现有Web应用程序上的某些网页时,必须将对现有Web应用程序的请求重定向到新的移动Web应用程序。
总而言之,我们有以下条件 -
如果网页请求包含查询字符串(jobId),则必须是 重定向到与其他人一起使用的移动网页(JobDtls.aspx) 查询字符串参数名称(jId);但使用相同的查询字符串 值。
如果网页请求不包含查询字符串,则为 重定向必须是移动网站的default.aspx页面。
上述条件必须仅在请求通过a时才有效 移动设备。
对于本任务,我提出了两种不同的重写规则,如下所述。但是,由于我是这个主题的新手,我想知道是否有人可以优化这个配置;可能只有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>
答案 0 :(得分:0)
首先,您的案例似乎不会受益于任何形式的规则组合。
当您想要避免重定向链接时,“组合”重定向规则特别有意义。您的情况不会导致重定向链接。有关详细信息,请参阅Combine Multiple IIS7 Rewrite Rules (Redirects) Into One(如果链接提供的解决方案仍未完成答案,请特别回答链接)。此外,它并不真正将规则合二为一,它确实允许它们在执行最终结果行动之前运行和累积。
然后,看起来我们不能在同一规则中使用logicalGrouping MatchAll和其他具有logicalGrouping MatchAny的条件,这对于组合两个规则的条件是必需的。另一种方法是详细说明匹配查询字符串条件的更复杂的正则表达式。但这会导致更难理解的东西,所以这对我来说是不可取的。
这仅适用于组合条件。你会遇到另一个麻烦:行动不一样。我认为没有办法表达处理你的两个案件的行动。