如何配置具有特定模式的 IIS 重写规则?
How to configure an IIS re-write rule with specific pattern?
我正在尝试创建一个 URL 重写规则,以将任何以特定 2 个字符的字符串(不区分大小写)结尾的 url 发送到不同的 url。
例如,我希望这些匹配:
http://www.foo.com/mn
http://www.foodev.com/mn
http://www.foo.com/MN
http://www.foodev.com/MN
但这些都失败了:
http://www.foo.com/la/mn
http://www.foo.com/la/di/da/mn
http://www.foodev.com/la/mn
http://www.foodev.com/la/di/da/mn
我设置了以下规则:
<rule name="Redirect MN" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{PATH_INFO}" pattern="/\/mn$/gmi" />
</conditions>
<action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule>
我在哪里使用带有模式 /\/mn$/gmi
的 {PATH_INFO} 值,它似乎应该匹配:https://regex101.com/r/ql2USW/1/
当我在 FREBUI 查看器中查看事件时,我看到了扩展的输入和模式(看起来是正确的),但没有成功。
Input {PATH_INFO}
ExpandedInput /MN
MatchType Pattern
Pattern /\/mn$/gmi
Negate false
Succeeded false
我应该如何更改此规则的配置?
Microsoft-IIS/10.0
也许,我们可以解决这个问题。让我们从一个简单的表达式开始,以传递我们想要的 URL 并使不需要的 URL 失败。稍后,如果我们愿意,我们可以用额外的边界来限制它。
在这里,这个表达式很可能通过简单地删除 $
字符来匹配所需的 URL:
\.com\/mn
我希望问题可以在这里得到解决。
Demo
我们可以继续添加边界,例如 .com
的左侧:
.+\.com\/mn
Demo
或者类似于你原来的版本,我们可以添加开始和结束边界:
^.+\.com\/mn$
Demo
然后,我们的设置可能如下所示:
<rule name="Redirect MN" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{PATH_INFO}" pattern="\.com\/mn/gmi" />
</conditions>
<action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule>
或者我们希望更改的任何其他模式可能会出现在这里:
pattern="\.com\/mn/gmi"
正则表达式
如果不需要此表达式,可以在 regex101.com 中对其进行修改或更改。
正则表达式电路
jex.im 也有助于形象化表达。
我正在发布对我有用的东西,它接近我已有的东西。我删除了全局标志(包括 case-insensitive 标志)。
现在规则匹配甚至忽略大小写,这正是我想要的。我不明白为什么它会起作用,因为模式应该只匹配小写字母。也许条件继承了它适用的规则的 "ignoreCase" 属性?我刚开始使用 URL 重写模块,所以其他人可能知道它是如何工作的。
<rule name="Redirect MN" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{PATH_INFO}" pattern="(\/mn$)" />
</conditions>
<action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule>
我正在尝试创建一个 URL 重写规则,以将任何以特定 2 个字符的字符串(不区分大小写)结尾的 url 发送到不同的 url。
例如,我希望这些匹配:
http://www.foo.com/mn
http://www.foodev.com/mn
http://www.foo.com/MN
http://www.foodev.com/MN
但这些都失败了:
http://www.foo.com/la/mn
http://www.foo.com/la/di/da/mn
http://www.foodev.com/la/mn
http://www.foodev.com/la/di/da/mn
我设置了以下规则:
<rule name="Redirect MN" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{PATH_INFO}" pattern="/\/mn$/gmi" />
</conditions>
<action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule>
我在哪里使用带有模式 /\/mn$/gmi
的 {PATH_INFO} 值,它似乎应该匹配:https://regex101.com/r/ql2USW/1/
当我在 FREBUI 查看器中查看事件时,我看到了扩展的输入和模式(看起来是正确的),但没有成功。
Input {PATH_INFO}
ExpandedInput /MN
MatchType Pattern
Pattern /\/mn$/gmi
Negate false
Succeeded false
我应该如何更改此规则的配置?
Microsoft-IIS/10.0
也许,我们可以解决这个问题。让我们从一个简单的表达式开始,以传递我们想要的 URL 并使不需要的 URL 失败。稍后,如果我们愿意,我们可以用额外的边界来限制它。
在这里,这个表达式很可能通过简单地删除 $
字符来匹配所需的 URL:
\.com\/mn
我希望问题可以在这里得到解决。
Demo
我们可以继续添加边界,例如 .com
的左侧:
.+\.com\/mn
Demo
或者类似于你原来的版本,我们可以添加开始和结束边界:
^.+\.com\/mn$
Demo
然后,我们的设置可能如下所示:
<rule name="Redirect MN" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{PATH_INFO}" pattern="\.com\/mn/gmi" />
</conditions>
<action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule>
或者我们希望更改的任何其他模式可能会出现在这里:
pattern="\.com\/mn/gmi"
正则表达式
如果不需要此表达式,可以在 regex101.com 中对其进行修改或更改。
正则表达式电路
jex.im 也有助于形象化表达。
我正在发布对我有用的东西,它接近我已有的东西。我删除了全局标志(包括 case-insensitive 标志)。
现在规则匹配甚至忽略大小写,这正是我想要的。我不明白为什么它会起作用,因为模式应该只匹配小写字母。也许条件继承了它适用的规则的 "ignoreCase" 属性?我刚开始使用 URL 重写模块,所以其他人可能知道它是如何工作的。
<rule name="Redirect MN" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{PATH_INFO}" pattern="(\/mn$)" />
</conditions>
<action type="Redirect" url="https//www.foo.com/mn" appendQueryString="false" redirectType="Permanent" />
</rule>