繁体   English   中英

IIS 7.0网址重写2规则和正则表达式问题

[英]IIS 7.0 Url Rewrite2 Rule and Regex Issues

我在服务器上使用IIS.net的 Url Rewrite程序来制定URL重写规则。 我在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.aspx Url重写,而Page.aspx Url重写将失败。 如果Page的规则居于首位,则重写Page.aspx Url,并且News.aspx Url重写失败。

我猜这是由于正则表达式匹配引起的。 让我演示给你看:

在此处输入图片说明

News.aspx的规则位于顶部。 所以它工作正常。 但是,当我单击Page.aspx时,RewriteUserFriendlyURL1的模式捕获了我的URL,并尝试将其重定向为News.aspx(在操作URL中显示)。

希望我的描述清楚。

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

但是我认为应该通过配置这些规则来解决此问题。

谢谢。

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

我了解您要完成的工作,但不能那样做。 URL重写模块不可能知道/Foo是新闻文章还是页面。 你最好的选择可能是把下新闻/news/<title>并保持/<title>为您的常规页面。 在这种情况下,您可以使用/news/来区分新闻和页面。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM