我在我的服务器上使用IIS.net's Url Rewrite程序为URL Rewrite制定规则。我的Asp.NET 4.0网站上有页面,例如Page.aspx和News.aspx。
当我为Page.aspx(http://www.foo.com/Page.aspx?PageTitle=Foo到http://www.foo.com/Foo创建规则时,它的效果非常好。
当我为News.aspx(http://www.foo.com/News.aspx?NewsTitle=Foo到http://www.foo.com/Foo创建规则时,它的效果也很好。
但是当我为News.aspx和Page.aspx创建规则时,它失败了。程序看起来规则顺序。如果News的规则位于顶部,则会重写News.aspx Url,并且Page.aspx Url重写失败。 如果Page的规则位于顶部,则重写Page.aspx Url,并且News.aspx Url重写失败。
我猜这个问题是因为正则表达式匹配而发生的。让我告诉你:
News.aspx的规则位居榜首。所以它工作正常。但是当我单击Page.aspx时,RewriteUserFriendlyURL1的模式会捕获我的URL,并尝试将其重定向到News.aspx(在Action Url中显示)。
我希望我的描述清楚。
我的问题是:我该如何避免这个问题?例如,我可以创建一个名为Redirect.aspx的新页面,并可以将所有页面重定向到此处。我可以为Redirect.aspx制作1条规则。
但我认为应该有另一种方法来配置这些规则来解决这个问题。
谢谢。
答案 0 :(得分:0)
问题是RewriteUserFriendlyURL1和RewriteUserFriendlyURL2的正则表达式完全相同,因此在这种情况下,列出它们的顺序决定首先应用哪个规则。
我明白你想要完成什么,但它无法像那样工作。 URL重写模块不可能知道/Foo
是新闻文章还是页面。您最好的选择可能是将新闻放在/news/<title>
下并保留/<title>
作为常规页面。在这种情况下,您可以使用/news/
来区分新闻和网页。
因此,您应该保持RedirectUserFriendlyURL2和RewriteUserFriendlyURL2相同,但将RedirectUserFriendlyURL1的操作URL更改为/news/{C:1}
,并将RewriteUserFriendlyURL1规则的模式更改为^news/([^/]+)/?$
(注意:^
之间没有斜杠和news
)。