2016-09-29 149 views
0

我在IIS中定义了以下重写规则,我想要维护它。我遇到的问题是,当此重写后面的应用程序向除本身之外的主机返回HTTP重定向响应(303或307)时,URL重写模块正在更改响应的Location标头上的主机。 (我已确认URL Rewrite存在错误,因为直接访问站点时没有发现此行为)。 IIS正在这样做,即使我做了而不是也没有定义任何出站规则。如何保持IIS重写传入请求,但是阻止它对传出响应进行未配置和意外处理?阻止IIS Url Rewrite模块修改HTTP 303/307响应

<rule name="ServiceName Rewrite"> 
    <match url="^(ServiceName/)?(.*)" /> 
    <conditions> 
    <add input="{HTTP_HOST}" pattern="^ServiceName([.]company[.]com)?$" /> 
    </conditions> 
    <action type="Rewrite" url="http://generic.company.com/ServiceName/{R:2}" /> 
</rule> 

编辑:

为了澄清,我的Web应用程序返回的

HTTP 307 
Location: http://somesite.company.com/path/to/item 

响应并且IIS无助地改变这

HTTP 307 
Location: http://ServiceName.company.com/path/to/item 
+0

IIS似乎因为客户需要接收与“其他”的主机的位置重定向响应正常工作。除非重定向响应响应初始请求提供了这个位置,否则客户怎么会知道重定向到哪里? – JohnH

+0

我编辑了这个问题,以更好地阐明发生了什么。我的Web应用程序正在返回一个正确生成的HTTP重定向,它可以在开发过程中以及从不通过URL重写模块的地址访问站点时使用。但是,URL重写模块正在修改输出,使重定向不再起作用。 – erdomke

+0

匹配标签中是否需要问号字符('?')?这可能会导致IIS始终应用重写操作。如果你删除了这个角色会发生什么? – JohnH

回答

1

我有与我的重定向相同的问题。

什么工作对我来说是:

  1. 在IIS管理器转到您的服务器
  2. 输入应用程序请求路由缓存
  3. 在操作去服务器代理设置
  4. 禁用复选框“在响应标题中反向重写主机
  5. 重新启动服务器