IIS 7.0 Url重写规则和正则表达式问题

时间:2012-11-06 09:44:16

标签: asp.net iis-7 url-rewriting

我在我的服务器上使用IIS.net's Url Rewrite程序为URL Rewrite制定规则。我的Asp.NET 4.0网站上有页面,例如Page.aspx和News.aspx。

当我为Page.aspx(http://www.foo.com/Page.aspx?PageTitle=Foohttp://www.foo.com/Foo创建规则时,它的效果非常好。

当我为News.aspx(http://www.foo.com/News.aspx?NewsTitle=Foohttp://www.foo.com/Foo创建规则时,它的效果也很好。

但是当我为News.aspx和Page.aspx创建规则时,它失败了。程序看起来规则顺序。如果News的规则位于顶部,则会重写News.aspx Url,并且Page.aspx Url重写失败。 如果Page的规则位于顶部,则重写Page.aspx Url,并且News.aspx Url重写失败。

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

enter image description here

News.aspx的规则位居榜首。所以它工作正常。但是当我单击Page.aspx时,RewriteUserFriendlyURL1的模式会捕获我的URL,并尝试将其重定向到News.aspx(在Action Url中显示)。

我希望我的描述清楚。

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

我明白你想要完成什么,但它无法像那样工作。 URL重写模块不可能知道/Foo是新闻文章还是页面。您最好的选择可能是将新闻放在/news/<title>下并保留/<title>作为常规页面。在这种情况下,您可以使用/news/来区分新闻和网页。

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