0

在 IIS 7.5 (Win2k8 R2) 中,我正在尝试为这些请求创建一个新规则:

http://www.domain.com/userprofile
https://www.domain.com/userprofile
http://domain.com/userprofile
https://domain.com/userprofile

重写为:

http://www.domain.com/users/?username=userprofile
(or whatever the protocol/domain is)

我写的正则表达式是:

^(http|https)://(www\.domain.com|domain\.com)/([a-zA-Z0-9-]{6,35})

重写是:

{R:1}://{R:2}/users/?username={R:3}

但这不起作用。是因为我不需要协议吗?我还添加了请求不是文件或目录的条件。

另外,每次更改规则时是否需要重新启动 IIS?

4

2 回答 2

1

当您想要重写这些请求时,您不必查看协议或域名。在您的情况下并不重要,因为您只想重写路径。

以下规则应该有效:

<rule name="Rewrite user profiles">
    <match url="([a-zA-Z0-9-]{6,35})" />
    <action type="Rewrite" url="/users/?username={R:1}" />
</rule>

更改规则时不必重新启动 IIS。IIS 将在 web.config 被修改时自动重启应用程序池,从而重新加载规则。

于 2013-01-22T22:18:13.407 回答
0

@Marco 几乎是正确的,但最终的工作方式如下:(我在 IIS 管理器中使用了 URL 重写表单)

正则表达式:

^([a-zA-Z0-9-]{6,35})(/?)$

条件:

Not a file
Not a directory

这会强制匹配直接在域之后开始,并且必须是第一个目录,或者没有尾随“/”。根据正则表达式,匹配必须介于 6 到 35 个字符之间,字母数字带有“-”

于 2013-01-23T00:23:43.130 回答