gpt4 book ai didi

IIS:使用应用程序请求路由在默认网站之外进行 URL 重写

转载 作者:行者123 更新时间:2023-12-04 15:21:30 25 4
gpt4 key购买 nike

我想在重写子域的 IIS 中进行 URL 重写。例如:

  • www.mycompany.com/api/v1.0被重写为 api1.mycompany.com
  • www.mycompany.com/api/v2.0被重写为 api2.mycompany.com

  • 请注意,我想 rewrite而不是 redirect ,换句话说,浏览器中的 URL 仍然是 www.mycompany.com/api/v1.0www.mycompany.com/api/v2.0 .

    任何不符合上述模式的请求都应由 www.mycompany.com 继续处理。 .

    我的理解是仅 URL Rewrite 2.0 模块不足以实现这一点,因此我安装了 Application Request Routing 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.comDefault Website对于 IIS。换句话说,只有当 IIS 设置为这样时:
  • 默认网站 (www.mycompany.com)
  • 该站点的 web.config 显示在
  • 上方。
  • api1.mycompany.com
  • api2.mycompany.com

  • 我的问题是 www.mycompany.com不能是 Default Website (默认网站由服务器上的另一个站点保留)。 www.mycompany.com只是另一个网站,就像 api1.mycompany.comapi2.mycompany.com .如果没有 www.mycompany.com,有什么方法可以让它工作吗?成为 Default Website ?像这样的东西?
  • 默认网站(一些其他不相关的网站)
  • www.mycompany.com
  • 本站的web.config如上图
  • api1.mycompany.com
  • api2.mycompany.com
  • 最佳答案

    如果可以更改 C:\Windows\System32\inetsrv\config\applicationHost.config配置文件,你可以把你的重写配置放在里面。

    我在本地测试,它在 IIS8 和 ARR 3.0 下工作。

    IIS configuration

    Application Request Routing configuration

    我的 applicationHost.config 文件如下所示:

    <system.webServer>
    <rewrite>
    <rules>
    <rule name="API v1.0" stopProcessing="true">
    <match url="^api/v1.0/(.*)$" />
    <action type="Rewrite" url="http://api1.company.com/{R:1}" />
    </rule>
    <rule name="API v2.0" stopProcessing="true">
    <match url="^api/v2.0/(.*)$" />
    <action type="Rewrite" url="http://api2.company.com/{R:1}" />
    </rule>
    </rules>
    </rewrite>
    </system.webServer>

    <!-- ... --->

    <webFarms>
    <applicationRequestRouting>
    <hostAffinityProviderList>
    <add name="Microsoft.Web.Arr.HostNameRoundRobin" />
    <add name="Microsoft.Web.Arr.HostNameMemory" />
    </hostAffinityProviderList>
    </applicationRequestRouting>
    </webFarms>

    <!-- ... --->

    <system.applicationHost>
    <sites>
    <site name="Default Web Site" id="1" serverAutoStart="true">
    <application path="/">
    <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:80:" />
    </bindings>
    </site>
    <site name="company.com" id="2">
    <application path="/" applicationPool="company.com">
    <virtualDirectory path="/" physicalPath="C:\tmp\company.com\www" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:80:www.company.com" />
    </bindings>
    </site>
    <site name="api1.company.com" id="3">
    <application path="/" applicationPool="api1.company.com">
    <virtualDirectory path="/" physicalPath="C:\tmp\company.com\api1" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:80:api1.company.com" />
    </bindings>
    </site>
    <site name="api2.company.com" id="4">
    <application path="/" applicationPool="api2.company.com">
    <virtualDirectory path="/" physicalPath="C:\tmp\company.com\api2" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:80:api2.company.com" />
    </bindings>
    </site>
    </sites>
    </system.applicationHost>

    Final result

    关于IIS:使用应用程序请求路由在默认网站之外进行 URL 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30160735/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com