![](/img/trans.png)
[英]IIS 7.5 ARR/URL ReWrite2 ReversProxy to Apache on Virtual Machine
[英]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=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.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.