IISredirect/重写到特定子目录的主机

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

例如,redirect“AbcService”子目录的请求:

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

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

 http://localhost/XyzService/... 

我以为我可以做到这一点与IIS UrlRewrite 2.0扩展,但到目前为止,我还没有能够拿出一个有效的规则。

首先,我不确定是否需要重写或redirect操作。 我可以使redirect动作工作,但没有数据返回。 可能是身份validation问题。

这是规则:

 URL: * Conditions: {HTTP_HOST} matches "localhost" {URL} matches "*/AbcService/* Action: Redirect (307) URL: http://dev.example.com/AbcService/{C:2} 

其中{C:2}是来自{URL}条件的“/ AbcService /”后面的path。

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

一些东西:

如果要在同一站点内传输到其他url,则应该使用rewrite 。 IIS重写模块可以在内部更改请求的url,并且可以在相同的现有请求pipe道中进行处理。

当您想要转移到同一台服务器或不同服务器上的其他站点时,需要redirect

当使用一个rewrite ,也是一个绝对的URL,我猜模块试图解决,在现有的网站,不能,所以它发送一个404。

条件是除了匹配的URL,在你的情况下,你不需要它们。 您的条件{HTTP_HOST}始终为真,它是您本地的开发者和parsing到本网站的名称(除非您希望它在使用127.0.0.1时performance不同)。 条件{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重写问题时,从web.config发布XML总是一个好主意

所有这些仍然不能解释为什么你的redirect方法不起作用? 也许通过提琴手看看可能会有所帮助。