Zac*_*Zac 3 asp.net url-rewriting domain-name iis-7.5
在上下文URL重写2.0在IIS 7.5中,我希望能够执行多个域的规范域名为多国网站,在尽可能少的规则可能.像这样的东西:
<rule name="UK Host Name">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^company\.co\.uk$" />
<add input="{HTTP_HOST}" pattern="^company\.co$" />
<add input="{HTTP_HOST}" pattern="^company\.org$" />
<add input="{HTTP_HOST}" pattern="^company\.net$" />
<add input="{HTTP_HOST}" pattern="^company\.uk\.com$" />
<add input="{HTTP_HOST}" pattern="^www\.company\.co\.uk$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.company.co.uk/{R:1}" />
</rule>
<rule name="France Host Name">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^company\.fr$" />
<add input="{HTTP_HOST}" pattern="^company-france\.com$" />
<add input="{HTTP_HOST}" pattern="^www\.company\.fr$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.company.fr/{R:1}" />
</rule>
Run Code Online (Sandbox Code Playgroud)
我认为,上述问题是每个条件都必须为真,logicalGrouping="MatchAll"但如果改为,MatchAny那么最后一个条件(with negate="true")将被忽略,这意味着即使用户正在访问正确的域,我们也会运行重定向规则.
我能想到的唯一选择是为每个不同的域都有一个单独的重写规则,但可能存在大量的域,它可能会变得混乱.将会有大量其他重写规则和地图.
如何创建更复杂的条件集,而不仅仅是All或Any?
诀窍是将您想要匹配的域与一个或者|运算符组合成一个规则,这样您就只有一个"正面"规则和一个"负面"规则MatchAll.例如:
<rule name="UK Host Name">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^company\.(co(\.uk)?|org|net|uk\.com)$" />
<add input="{HTTP_HOST}" pattern="^www\.company\.co\.uk$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.company.co.uk/{R:1}" />
</rule>
<rule name="France Host Name">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^company(-france)?\.(fr|com)$" />
<add input="{HTTP_HOST}" pattern="^www\.company\.fr$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.company.fr/{R:1}" />
</rule>
Run Code Online (Sandbox Code Playgroud)
这可能最终使您的正则表达式与太多域名匹配的可能性很小.例如,模式pattern="^company(-france)?\.(fr|com)$"也匹配company.com可能不合需要的模式.在这种情况下,您必须更具体,例如将模式更改为pattern="^company\.fr|company-france\.com$".
| 归档时间: |
|
| 查看次数: |
3596 次 |
| 最近记录: |