是否可以在 IIS 中定义虚拟目录并使得文件相对于物理目录而不是虚拟目录?

是否可以在 IIS 中定义虚拟目录并使得文件相对于物理目录而不是虚拟目录?

是否可以在 IIS 中定义虚拟目录并以某种方式使该目录中的文件相对于物理目录而不是虚拟目录?

例如,在我的服务器上,我有以下文件夹:D:\WebSite\Css\myTheme.cssD:\WebSite\Images\image1.jpg

我在 IIS 上创建了一个虚拟目录resources.mysite:在我的网站中,我像这样引用该工作表resources.mysite/myTheme.css

但里面myTheme.css我参考了的图片../Images/images1.jpg

所以问题是image1.jpg找不到它,因为它与物理文件夹相关,而不是与 IIS 上的虚拟文件夹相关。

我不修改样式表就能解决这个问题吗?

答案1

解决该问题的一个简单方法是使用 URL 重写 (http://www.iis.net/download/URLRewrite) 直接在 /myTheme.css 上公开相同的 /CSS/myTheme.css,这样当浏览器解析相对 URL 时,它将正确解析它们。这样应该可以工作,我还应该提到 IIS URL Rewrite 的性能极高,并且与内核缓存配合良好,不会影响任何性能。

换句话说,只需安装 URL Rewrite 并在您的网站根目录创建一个 web.config 文件,内容如下,就可以了。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Expose Theme CSS" stopProcessing="true">
          <match url="^myTheme.css" />
          <action type="Rewrite" url="/CSS/myTheme.css" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

答案2

不可以。您不能使用它../来访问比根文件夹(站点或虚拟目录,以适用者为准)更高级别的文件夹。

如果可以的话,这将是一个重大的安全问题。人们可以做一些事情,比如http://yoursite.com/../../../../Windows/System32/Config/SYSTEM开始下载你的注册表、SAM 数据库,或者谁知道他们还会发现什么有趣的东西。

相关内容