Asp.net IIS 7.0 Url重写2规则和正则表达式问题

Asp.net IIS 7.0 Url重写2规则和正则表达式问题,asp.net,iis-7,url-rewriting,Asp.net,Iis 7,Url Rewriting,我在服务器上使用Url重写程序来制定Url重写规则。我的Asp.NET 4.0网站上有一些页面,如Page.aspx和News.aspx 当我为Page.aspx(to)创建规则时,效果非常好 当我为News.aspx(to)创建规则时,它也非常有效 但是当我为News.aspx和Page.aspx创建规则时,它失败了。程序按规则顺序运行。如果News的规则位于顶部,则News.aspx Url重写失败,Page.aspx Url重写失败。 若页面的规则位于顶部,则Page.aspx Url重写

我在服务器上使用Url重写程序来制定Url重写规则。我的Asp.NET 4.0网站上有一些页面,如Page.aspx和News.aspx

当我为Page.aspx(to)创建规则时,效果非常好

当我为News.aspx(to)创建规则时,它也非常有效

但是当我为News.aspx和Page.aspx创建规则时,它失败了。程序按规则顺序运行。如果News的规则位于顶部,则News.aspx Url重写失败,Page.aspx Url重写失败。 若页面的规则位于顶部,则Page.aspx Url重写失败,News.aspx Url重写失败

我猜这个问题是因为正则表达式匹配。让我告诉你:

News.aspx的规则位于顶部。所以它工作得很好。但当我单击Page.aspx时,RewriteUserFriendlyURL1的模式会捕获我的URL,并尝试将其重定向到News.aspx(如操作URL所示)

我希望我的描述清楚

我的问题是:如何避免这个问题?例如,我可以创建一个名为Redirect.aspx的新页面,并可以将所有页面重定向到此处。我可以为Redirect.aspx制定一条规则

但是我认为应该有另一种方法来解决这个问题,配置这些规则


谢谢。

问题在于RewriteUserFriendlyURL1和RewriteUserFriendlyURL2的正则表达式完全相同,因此在这种情况下,它们的列出顺序决定了首先应用哪个规则

我理解你想要实现的目标,但它不能像那样工作。URL重写模块不可能知道
/Foo
是新闻文章还是页面。您最好的选择可能是将新闻放在
/news/
下,并为您的常规页面保留
/
。在这种情况下,您可以使用
/news/
来区分新闻和页面

因此,您应该保持RedirectUserFriendlyURL2和RewriteUserFriendlyURL2相同,但将RedirectUserFriendlyURL1的操作URL更改为
/news/{C:1}
,并将RewriteUserFriendlyURL1规则的模式更改为
^news/([^/]+)/?$
(注意:
^
新闻之间没有斜杠)