IIS:在默认网站之外使用应用程序请求路由进行URL重写
我想在重写子域的IIS中重写URL。例如:IIS:在默认网站之外使用应用程序请求路由进行URL重写,iis,url-rewriting,Iis,Url Rewriting,我想在重写子域的IIS中重写URL。例如: www.mycompany.com/api/v1.0被重写为api1.mycompany.com www.mycompany.com/api/v2.0被重写为api2.mycompany.com 请注意,我想重写而不是重定向,换句话说,浏览器中的URL仍然是www.mycompany.com/api/v1.0和www.mycompany.com/api/v2.0 任何不符合上述模式的请求都应继续由www.mycompany.com处理 我的理解是U
被重写为www.mycompany.com/api/v1.0
api1.mycompany.com
被重写为www.mycompany.com/api/v2.0
api2.mycompany.com
重写
而不是重定向
,换句话说,浏览器中的URL仍然是www.mycompany.com/api/v1.0
和www.mycompany.com/api/v2.0
任何不符合上述模式的请求都应继续由www.mycompany.com
处理
我的理解是URL重写2.0模块本身不足以实现这一点,因此我安装了应用程序请求路由3.0。下面是我尝试执行的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="false" />
<rewrite>
<rules>
<rule name="API v1.0" stopProcessing="true">
<match url="^api/v1.0/(.*)$" />
<action type="Rewrite" url="http://api1.mycompany.com/{R:1}" />
</rule>
<rule name="API v2.0" stopProcessing="true">
<match url="^api/v2.0/(.*)$" />
<action type="Rewrite" url="http://api2.mycompany.com/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
一旦我安装了应用程序请求路由,我就能够让它工作,但前提是www.mycompany.com
是IIS的默认网站。换句话说,仅当IIS设置为:
- 默认网站(
www.mycompany.com
)
- 此网站的web.config如上图所示
api1.mycompany.com
api2.mycompany.com
我的问题是www.mycompany.com
不能是默认网站
(默认网站由服务器上的另一个网站保留)www.mycompany.com
只是另一个网站,就像api1.mycompany.com
或api2.mycompany.com
。如果www.mycompany.com
不是默认的网站,有没有办法让它正常工作?像这样的
- 默认网站(其他一些非相关网站)
www.mycompany.com
- 此网站的web.config如上图所示
api1.mycompany.com
api2.mycompany.com
如果可以更改C:\Windows\System32\inetsrv\config\applicationHost.config
config文件,则可以将重写配置放入其中
我在本地测试,它在IIS8和ARR 3.0下工作
我的applicationHost.config文件如下所示:
几周前我就想这么做。我不确定URL重写2.0是否可以完成。在我看来,请求首先被传递到重写模块,然后根据映射被传递到同一应用程序池中的新句柄。如果URL重写需要将请求传递到另一台计算机或在应用程序池之间,它将无法按您希望的方式工作。我建议将这个问题变得更一般一些,以防在IIS上使用其他工具可以实现您想要的功能。我把这个问题投了赞成票,因为我仍然希望我是错的:D你能在C:\Windows\System32\inetsrv\config\applicationHost.config上做些更改吗?@CyrilDurand你能详细说明一下需要在applicationHost.config上做些什么更改吗?我试过了你所有的步骤,但都没能成功。直接访问api2.mycompany.com/books是可行的,但试图通过www.mycompany.com/api/v2.0/books访问却不行,我得到了404响应。您的示例中的www.company.com是否在IIS中设置为“默认网站”(即IIS中默认设置的网站)?@johnyoshika不是,但我重试了一次,效果相同,我还编辑了我的答案。可能应用程序在url中检查某些内容失败(ASP.net路由)。你能试着使用一些简单的资源,比如index.html
,看看它是否有效吗?哇,当你使用简单的html文件时,它就有效了。在.Net中一定有东西路由错误。非常感谢。我试过使用MVC和WebAPI应用程序,效果很好。你的应用程序对URL有什么特别之处吗?尝试使用IIS失败的请求跟踪,可能会有所帮助。同时尝试设置断点,也许您会发现未修补的异常。谢谢您的建议,@Cyril Durand。我们的主要应用程序是MVC,我们的API是WebAPI,我不认为我们对URL做了什么特别的事情,但我可能弄错了,因为我们的应用程序在过去几年中已经发展得相当大了。我会试试你的建议,看看哪里出了问题。