帮助从ISAPI_Rewrite迁移到IIS7 URL重写

时间:2010-01-08 16:31:06

标签: regex iis-7 asp-classic url-rewriting

我有这个ISAPI_Rewrite规则:

RewriteRule /([^/.?]+) /sc.asp?p=$1 [I,L]

此规则应重写Urls,如:

  

/一些-制品

     

/第二条

不应该重写网址,如:

  

/home.asp

     

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

     

/管理/

     

/位点/格特曼

它在ISAPI_Rewrite中运行良好 昨天我买了一台Windows 2008 R2 VPS,我开始将我的ASP经典Web应用程序转移到新服务器上。现在,除了URL重写之外,一切都运行良好。我稍微google了一下,发现IIS7 URL Rewrite模块与ISAPI_Rewrite完全不同。

我创建了空白规则。在我设置/([^/.?]+)的模式中,在行动中 - >操作类型我设置Rewrite并在操作中 - >动作属性 - >重写网址我设置了sc.asp?p={R:0}。它没用。

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

有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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