网址重写正则表达式问题

本文关键字:问题 正则表达式 重写 | 更新日期: 2023-09-27 18:33:59

Night,

我的任务是将网站从 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/图像其他文件等,例如:

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谢谢迈克尔

网址重写正则表达式问题

这里有几个问题。首先是以下重写规则不起作用:

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

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

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

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