【问题标题】:How do I resolve absolute URLs for different sites in the same parent IIS virtual directory in .NET?如何解析 .NET 中同一父 IIS 虚拟目录中不同站点的绝对 URL?
【发布时间】:2012-05-16 07:52:08
【问题描述】:

我的目标是跨多个网站共享图像、css、js 等,这些网站都托管在 IIS 的同一父虚拟目录下。当然,我可以对图像路径进行硬编码,但我希望 .NET 有一种方法可以使用 IIS 配置智能地解析 URL。

这是我的文件/虚拟目录结构:

Parent Site (Virtual Directory)
  default.aspx
  mypage.aspx
  otherpage.aspx
  images
    - logo.jpg
  css
    - site.css
  Subsite1 (Virtual Directory)
    - default.aspx
    - products.aspx
  Subsite2 (Virtual Directory)
    - default.aspx
    - products.aspx
    - miscellaneous.aspx

Parent SiteSubsite1Subsite2 都是分别为 http://parentsite.comhttp://subsite1.comhttp://subsite2.com 设置的虚拟目录。我想在这些网站上共享图片、js、css等。

.NET 中是否有一种方法可以在从其中一个子站点(例如,http://subsite.com/default.aspx)调用时将 ~/images/logo.jpg 解析为 http://parentsite.com/images/logo.jpg

【问题讨论】:

  • .NET 如何知道“subsite.com”和“parentsite.com”有任何关联?它唯一可以关联的是当前的 URI 请求。也许只是在链接到父级共享文件夹的子级上创建虚拟目录,以便它们都可以引用 /assets/ ?
  • 在根目录下创建一个文件夹,命名为assets。将所有常见的共享资产放在那里。在每个“虚拟目录”中,为引用根资产文件夹的资产创建一个新的虚拟目录。然后 ~/assets 将始终成为根站点的资产文件夹。 parentsite.com/assets , childsite.com/assets 是一回事
  • 恕我直言,虽然这可以工作,但 CDN 类型的设置有更多好处。 1)缓存! 2)more connections at the same time.
  • @Eonasdan 虽然 CDN 可以工作,但要求 Justin 可以在所有子站点上共享同一个域 (cdn.parentsite.com) 或为每个域 (cdn) 设置单独的 CDN 站点.everysite.com)。两种解决方案都行得通,只是归结为最适合他需要的解决方案。
  • @NickBork 是的,是的。我想我已经从他的问题的措辞中假设了这一点。请带上你的cmets并让他们回答,以便他可以选择它,我可以投票赞成:)(或者我可以将它添加到我的以使其更完整)

标签: c# asp.net url iis-6 virtual-directory


【解决方案1】:

在 IIS6 甚至 IIS7 中,您可以在所有子站点中使用新的虚拟目录,称为“资产”。

更新的网站布局:

Parent Site (Virtual Directory)
     default.aspx
     mypage.aspx
     otherpage.aspx
     assets
          -images
               - logo.jpg
          -css
               - site.css    

Subsite1 (Virtual Directory)
     - default.aspx
     - products.aspx
     assets (Virtual Directory to parent assets)

Subsite2 (Virtual Directory)
     - default.aspx
     - products.aspx
     - miscellaneous.aspx 
     assets (Virtual Directory to parent assets)

使用这种结构,您可以与所有站点共享同一个“assets”文件夹,并且仍然可以作为“~/assets”访问它。这允许您将资产与 IIS 正在响应的任何域一起使用。

http://parentsite.com/assets

http://childsite.com/assets

CDN 是一个不错的选择,但通常您会为每个站点创建单独的 DNS 条目,例如 http://cdn.parentsite.comhttp://cdn.childsite.com,然后创建一些函数以将文件引用为 http://cdn.(currentdomain)。

在我看来,使用共享资源文件夹的绝对或相对路径将使您的生活更轻松。

【讨论】:

    【解决方案2】:

    您应该创建一个cdn 子域并将资源文件指向该子域,例如

    http://cdn.parentsite.com/images/logo.jpg
    http://cdn.parentsite.com/css/site.css
    

    等等。

    This~/images/logo.jpg 永远不会解析为除应用根目录之外的任何内容。这就是~ 的全部意义所在。

    【讨论】:

      【解决方案3】:

      一种选择是创建具有共享图像的 resources.site.com 或将其移动到 CDN。

      然后,在每个消耗这些资源的站点中,都有一个配置设置资源所在的位置。这些网站使用配置设置格式化资源的完全限定 URL。

      由于您已在代码中抽象出 resources.site.com,因此它可能位于同一服务器、不同服务器、CDN 等... 没关系 - 您可以灵活地为它们提供服务向上。您也可以在同一台服务器上开始使用它,当您想要针对地理位置进行优化时,将其移至 CDN。

      【讨论】:

        猜你喜欢
        • 2011-04-25
        • 2010-11-28
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多