Asp.net IIS重写规则更改我当前的aspx页面超链接href错误
从本地iis浏览我的网站时,地址在浏览器地址栏中显示为 我试图从浏览器地址栏中提取国家代码,并使用IIS重写出站规则插入所有超链接的href 这是我在web.config文件中使用的出站规则Asp.net IIS重写规则更改我当前的aspx页面超链接href错误,asp.net,iis,url-rewrite-module,Asp.net,Iis,Url Rewrite Module,从本地iis浏览我的网站时,地址在浏览器地址栏中显示为 我试图从浏览器地址栏中提取国家代码,并使用IIS重写出站规则插入所有超链接的href 这是我在web.config文件中使用的出站规则 <outboundRules> <rule name="add outbound rule" preCondition="Ishtml" enabled="true" stopProcessing="true"> <match filterByTags=
<outboundRules>
<rule name="add outbound rule" preCondition="Ishtml" enabled="true" stopProcessing="true">
<match filterByTags="A" pattern="(\/[a-z]+\/)(.*)" negate="true" />
<action type="Rewrite" value="{R:1}{R:2}" />
</rule>
<preConditions>
<preCondition name="Ishtml">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="text/html" />
</preCondition>
</preConditions>
</outboundRules>
所以在测试期间,我看到{R:1}是/gb/,{R:2}是default.aspx。因此,当执行此规则时,它会更改default.aspx页面中的所有超链接href,并且所有超链接href现在变为
基本上,我需要在当前页面的所有超链接href中插入浏览器地址栏url中的国家代码
我想我离我想要实现的目标有点近了,但现在我不需要什么帮助来解决这个问题。我想这个区域需要更改位
因此,请提供一些帮助并将我引向正确的方向。当您使用{R:1}
和{R:2}
反向引用规则匹配的部分时,您的重写操作将不起作用,但这将永远不会匹配,因为您使用negate=“true”
对其进行了否定。也就是说,如果它与正则表达式不匹配,{R:1}
和{R:2}
也很可能不可用
您需要做的是添加一个额外的条件,该条件与具有相同正则表达式的查询字符串相匹配。此条件将确保当前URL与该正则表达式匹配,然后您可以使用{C:1}
和{C:2}
等返回该正则表达式的部分引用。。。(用字母C
代替R
)。诀窍是使用{C:1}
和{R:0}
的组合{C:1}
将提供当前URL中的语言代码,{R:0}
将提供
中的原始URL
因此,您将以以下方式结束:
另一方面,a标记的正则表达式非常弱。它将匹配/gb/default.aspx
,但也将匹配/foo/bar/default.aspx
或/foo/bar/gb/default.aspx
,因此不会重写这些链接。我已将其替换为仅与/
匹配的更严格版本
注意,我在匹配完条件中第一组中的前两个字母后使用了\/
,因为我们不需要后面引用{C:1}
中的斜杠,因为它已经在{R:0}
中了
EDIT:我假设即使正则表达式不匹配,{R:0}
仍然可以用作反向引用。情况似乎并非如此。因此,我取出了negate=“true”
并修复了正则表达式,以匹配除以/开头的URL之外的任何URL。谢谢您的帮助。我会检查并让你知道你的规则是否适用于我。我有一篇关于重写规则的文章。你能看看这篇文章并分享你的想法吗?为什么在你的规则中否定=“true”?