2

我的目标是跨多个网站共享图像、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

4

3 回答 3

3

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

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

ETC..

~/images/logo.jpg永远不会解决除应用程序根以外的任何问题。这就是~.

于 2012-05-07T20:08:18.463 回答
3

在 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 .(当前域)。

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

于 2012-05-08T13:42:31.750 回答
1

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

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

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

于 2012-05-07T20:10:51.567 回答