IIS 重定向/重写至特定子目录的主机

IIS 重定向/重写至特定子目录的主机

作为开发人员,我想将某些(AJAX)请求重定向到 DEV 服务器而不是我的本地网络服务器。

例如,重定向“AbcService”子目录的请求:

http://localhost/AbcService/json?queryString
http://dev.example.com/AbcService/json?queryString

我不想重定向本地主机的其他请求,例如:

http://localhost/XyzService/...

我认为我可以使用 IIS UrlRewrite 2.0 扩展来实现这一点,但迄今为止我还没有想出一个可行的规则。

首先,我不确定我是否需要重写或重定向操作。我可以让重定向操作工作,但没有返回任何数据。可能是身份验证问题。

规则如下:

URL: *
Conditions:
 {HTTP_HOST} matches "localhost"
 {URL} matches "*/AbcService/*

Action:
Redirect (307)
URL: http://dev.example.com/AbcService/{C:2}

其中 {C:2} 是 {URL} 条件中“/AbcService/”后面的路径。

我不明白的一件事是,为什么将其从重定向切换到重写操作会导致 404,即使我有完全相同的条件。

答案1

一些东西:

rewrite如果要在同一站点内转移到不同的 URL,则应使用A。IIS重写模块可以在内部更改请求的 URL,并且可以在相同的现有请求管道中处理它。

redirect当您想要转移到同一台服务器或不同服务器上的不同站点时,需要A ,这就是您的情况。

当使用rewrite和绝对 URL 时,我猜测模块会尝试在现有站点内解析该 URL 但无法解析,因此会发送 404。

条件是除了匹配的 URL 之外的附加项,在您的情况下不需要它们。您的条件{HTTP_HOST}始终为真,它是您的本地开发箱和解析到此站点的名称(除非您希望它在使用 127.0.0.1 时表现不同)。条件{URL}应移入模式:

<rule name="ServerFault" patternSyntax="Wildcard" stopProcessing="true">
    <match url="AbcService/*" />
    <action type="Redirect" url="http://dev.example.com/AbcService/{R:1}" />
</rule> 

匹配项会查看host slash(主机名后的第一个斜杠)后面的所有内容

在这里发布 Url Rewrite 问题时,最好从 web.config 发布 XML

所有这些仍然不能解释为什么你的重定向方法不起作用?也许看一下Fiddler可能会有帮助。

相关内容