Asp.net IIS重写规则更改我当前的aspx页面超链接href错误

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=

从本地iis浏览我的网站时,地址在浏览器地址栏中显示为

我试图从浏览器地址栏中提取国家代码,并使用IIS重写出站规则插入所有超链接的href

这是我在web.config文件中使用的出站规则

<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”?