【问题标题】:urlrewriting regex issuesurl重写正则表达式问题
【发布时间】:2012-05-11 23:23:12
【问题描述】:

晚上,

我的任务是将网站从 subdomain.domain.com 移动到 domain.com/subdomain。

我遇到的问题:

原子域和域名都有url重写规则(asp.net、UrlReWriter)

所以,我已将子域内容文件移动(或者更确切地说,复制)到主域下的新子文件夹,事情似乎进展顺利,但有一两个问题......

我需要匹配以下内容:

http://www.maindomain.com/category.aspx?name=foo -> http://www.maindomain.com/foo/ http://www.maindomain.com/viewproduct.aspx?catName=foo&productName=bar -> http://www.maindomains.com/foo/bar.aspx

我有点已经开始工作了,但是由于配置文件继承,我必须在主应用程序(主域)web.config 中指定重写规则,所以我还需要匹配这些规则:

http://www.maindomain.com/us/category.aspx?name=foo -> http://www.maindomain.com/us/foo/ http://www.maindomain.com/us/viewproduct.aspx?catName=foo&productName=bar -> http://www.maindomain.com/us/foo/bar.aspx

显然,重写引擎需要忽略 css/images 其他文件等,例如:

http://www.maindomain.com/about.aspx & http://www.maindomain.com/us/about.aspx

需要任何其他信息,尽管问..

我目前的规则是:

    <rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
<rewrite url="^/us/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?$" to="$1" processing="stop"/>

<rewrite url="^/us/Error.aspx" to="$1" processing="stop"/>
<rewrite url="^/us/Error404.aspx" to="$1" processing="stop"/>

<rewrite url="Error.aspx" to="$1" processing="stop"/>
<rewrite url="Error404.aspx" to="$1" processing="stop"/>

    <rewrite url="^/us/$" to="$1" processing="stop"/>
<rewrite url="^/us/(.+)/(.+).aspx" to="/us/viewProduct.aspx?productName=$2&amp;catName=$1" processing="stop"/>
<rewrite url="^/us/(.+)/" to="/us/category.aspx?name=$1" processing="stop"/>

<rewrite url="^/(.+)/(.+).aspx" to="~/viewProduct.aspx?productName=$2&amp;catName=$1" processing="stop"/>
<rewrite url="^/(.+)/" to="~/category.aspx?name=$1" processing="stop"/>

使用,iis7.5,c#,asp.net v2 谢谢 迈克尔

【问题讨论】:

  • 我忘了补充,我使用的是 Intelligencia Rewriter,而不是 IIS UrlReWriter

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


【解决方案1】:

这里有一些问题。首先是下面的重写规则不起作用:

<rewrite url="^/us/$" to="$1" processing="stop"/>

您要求重写模块将 url /us/ 替换为匹配组一,但您的捕获表达式中没有组。要解决此问题并处理 /us/ 文件夹中的 .aspx 文件,请将其替换为以下两条规则:

<rewrite url="^/us/$" to="/us/default.aspx" processing="stop"/>
<rewrite url="^(/us/[^/]+\.aspx)$" to="$1" processing="stop"/>

此外,不需要您的第二个重写规则(针对 /us/ 文件夹中的静态内容),因为第一个重写规则不关心文件在哪个文件夹中,并且会匹配(并停止处理)对于/us/images/foo.jpg等网址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2018-12-23
    相关资源
    最近更新 更多