0

我在 IIS 7 中应用了 URL 重写规则,如下所示:

模式:^([0-9a-zA-Z-]+)/([0-9a-zA-Z-./()]+)

重写网址:{R:1}.svc/{R:2}

当我像这样调用我的服务时,这非常有效:http://mysite/site/myservice/input/params

我面临的问题是我的项目中指向 HTML 文件的所有其他链接似乎都附加了 .svc,例如此代码不起作用:

<link rel="stylesheet" type="text/css" href="StyleSheet/StyleSheet.css" />

当我尝试在 Web 浏览器中导航到 URL 时,我收到如下错误消息:

找不到资源:请求的 URL:/site/stylesheet* .svc */stylesheet.css

IIS 似乎在 svc 存在时正确地删除它,但在它不存在的情况下添加它。

有任何想法吗??

4

1 回答 1

0

鉴于重写规则的定义方式,您所描述的实际上是正确的行为。请记住,该规则基本上是说,对于与该模式匹配的任何传入 URL,将其^([0-9a-zA-Z-]+)/([0-9a-zA-Z-./()]+)重写,以便.svc附加到第 1 组。

显然,这不是你想要的。因此,您需要确保重写仅适用于某些 URL,即您的服务调用。

我建议将所有.svc文件放在一个专用的子文件夹中,例如“服务”,然后像这样更改规则:

^services/([0-9a-zA-Z-]+)/([0-9a-zA-Z-./()]+)

这样,只有服务 URL 将被重写,而所有其他 URL 将不会被触及,因为它们不再与模式匹配。

于 2011-09-23T12:34:44.343 回答