作为开发人员,我想将某些(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可能会有帮助。