如何解析 .NET 中同一父 IIS 虚拟目录中不同站点的绝对 URL

本文关键字:站点 URL 虚拟 NET 何解析 IIS | 更新日期: 2023-09-27 18:33:36

我的目标是在多个网站之间共享图像,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.com、http://subsite1.com 和 http://subsite2.com 设置的虚拟目录。我想在这些网站上共享图像,js,css等。

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

如何解析 .NET 中同一父 IIS 虚拟目录中不同站点的绝对 URL

在 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 是一个不错的选择,但通常您会为每个站点(如 http://cdn.parentsite.com 和 http://cdn.childsite.com)创建单独的 DNS 输入,然后创建一些函数来引用文件作为 http://cdn。(当前域)。

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

您应该

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

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

等。。

~/images/logo.jpg永远不会解析为应用程序根目录以外的任何内容。这就是~的重点.

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

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

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