Regex 帮助从ISAPI_重写迁移到IIS7 URL重写

Regex 帮助从ISAPI_重写迁移到IIS7 URL重写,regex,iis-7,asp-classic,url-rewriting,Regex,Iis 7,Asp Classic,Url Rewriting,我有一个ISAPI_重写规则: RewriteRule /([^/.?]+) /sc.asp?p=$1 [I,L] 此规则应重写URL,如下所示: /一些文章 /第二条 而且不应该像这样重写URL: /home.asp /admin(因为有一个名为admin的目录) /管理员/ /场地/古特曼 它在ISAPI_重写中非常有效 昨天我买了一台Windows2008R2虚拟专用系统,我开始将我的ASP经典web应用程序转移到新服务器上。现在,除了URL重写,一切都很好。我在谷歌上搜索了一下,发现I

我有一个ISAPI_重写规则:

RewriteRule /([^/.?]+) /sc.asp?p=$1 [I,L]
此规则应重写URL,如下所示:

/一些文章

/第二条

而且不应该像这样重写URL:

/home.asp

/admin(因为有一个名为admin的目录)

/管理员/

/场地/古特曼

它在ISAPI_重写中非常有效 昨天我买了一台Windows2008R2虚拟专用系统,我开始将我的ASP经典web应用程序转移到新服务器上。现在,除了URL重写,一切都很好。我在谷歌上搜索了一下,发现IIS7 URL重写模块与ISAPI_重写模块完全不同

我创建了一个空白规则。在模式中我设置了
/([^/?]+)
,在动作中->动作类型我设置了
重写
,在动作中->动作属性->重写Url我设置了
sc.asp?p={R:0}
。它不起作用

在谷歌搜索之后,我发现我必须在我的模式开始时远程调用
/
字符(因此我的模式现在是
([^/?]+)
)。所以我做了,现在,它只是重写任何url,它应该只重写不是目录或文件的url

有什么想法吗


谢谢。

避免重写实际指向现有文件的URL的最简单方法是添加以下条件:

<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

此外,您的匹配模式显示了一个常见的误解。查询字符串没有传递到匹配URL模式,因此您不需要查找