asp.net - 在 IIS 7.5 上的同一端口上运行两个网站?

标签 asp.net iis request asp.net-routing

我们需要能够在相同的 Intranet 服务器和端口号上运行一个 ASP.net Web 应用程序的两个版本,但一个映射到/,另一个映射到/experimental(不是实名,但足够接近)。

C:\inetpub\wwwroot\Version1 => http://test1.organization.com/
C:\inetpub\wwwroot\Version2 => http://test1.organization.com/experimental

第一个 URL 已经暴露给一些 beta 用户,因此需要保持一定的稳定性。第二个将包含只有进入/experimental 的用户才能看到的实验代码。我们无法选择使用不同的服务器或不同的端口。

过去,我通过将/映射到 IIS 中的站点下的站点,然后将第二个站点作为应用程序添加到它下面,并将其别名为/site2 来实现这一点。

服务器
网站
默认网站 <= 映射到第一个版本的物理路径和/
/Application1 <= 嵌套应用程序映射到第二个版本和/experimental

然而,这似乎是草率的。使用重写规则或使用 ARR 会更干净吗?如果是这样,怎么做?

谢谢!

最佳答案

ARR 和重写规则的组合将很好地解决这个问题。以下是要遵循的步骤:

  • 下载并安装 ARR http://www.iis.net/download/ApplicationRequestRouting
  • 在 IIS 管理器中,在连接 Pane 中选择您的计算机,双击 IIS 部分中的应用程序请求路由功能,单击操作 Pane 中的“服务器代理”链接,然后选中“启用代理”复选框并选择应用行动。
  • 更改现有两个网站的绑定(bind),例如将已发布网站绑定(bind)到 81 端口,将实验网站绑定(bind)到 82 端口。
  • 新建网站和应用池,绑定(bind)http:*:80: .将其命名为“默认网站”。将其物理路径指向“%SystemDrive%\inetpub\DefaultWebSite”
  • 为“默认”网站创建一个 web.config 文件,并在那里编写您的路由规则:
    <rules>
        <rule name="Reverse Proxy for Experimental" stopProcessing="true">
            <match url="^.*/experimental/.*" />
            <action type="Rewrite" url="http://{HTTP_HOST}:82/{R:0}" />
        </rule>
        <rule name="Reverse Proxy for Release" stopProcessing="true">
            <match url=".*" />
            <action type="Rewrite" url="http://{HTTP_HOST}:81/{R:0}" />
        </rule>
    </rules>
    
  • 您可能需要稍微修改一下您的重写规则,您可以在 IIS 上尝试使用 URL 重写模块小程序,并在此处阅读更多信息:http://learn.iis.net/page.aspx/500/testing-rewrite-rule-patterns/如需进一步帮助,请务必浏览 Ruslan Yakushev 的博客:http://ruslany.net/

  • 这将为您提供三个完全独立的网站,可通过端口 80 上的单个外观访问(当然,如果需要,您可以直接在端口 81 和 82 上访问每个网站:例如 http://localhost:81/default.aspx)。

    关于asp.net - 在 IIS 7.5 上的同一端口上运行两个网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087162/

    相关文章:

    jquery - 如何动态设置span标签的标题属性

    c# - 将 div 元素发送到电子邮件时丢失样式 (C# asp.net)

    asp.net - AppPool 自行关闭

    request - 使用 HTTP.jl 设置获取请求的超时

    javascript - Qooxdoo AJAX 帮助 - 事件不起作用?

    java - 如何通过 URL base 拦截请求?

    c# - 禁用从 Radcombobox 值列表中进行选择

    javascript - 从标签中显示或隐藏 div 单击

    c# - MsDeploy - 无法更新应用程序池

    c# - 那么... ASP.NET MVC 和 WebSockets?