【问题标题】:Can IIS modify the URI when a call is made to a specific folder?调用特定文件夹时,IIS 可以修改 URI 吗?
【发布时间】:2013-03-05 17:48:05
【问题描述】:

我有一个 .NET 应用程序,它在 /images/ 文件夹中包含 500 多个图像。在我的表示层中,我使用相对路径引用这些图像。

<img src="/images/testimage.png" />

我现在想移动这些图像以从 Azure Blob 存储容器提供服务。所以我的新路径需要明确定义资源的完整 URI。

<img src="https://myarea.blob.core.windows.net/images/testimage.png" />

当我想到我可以使用 IIS 重新路由这些请求时,我正要进行站点范围的查找替换。所以我的问题是 IIS 是否可以在提供文件之前拦截对 /images 文件夹的请求并为新的 URI 添加前缀?如果是这样,除了从新位置获取图像所花费的时间之外,这会给应用程序带来什么类型的延迟?我的大多数图像文件是 .png、.gif 和 .jpeg,通常为 5-20kb,用于模板、按钮和一般格式设置。

【问题讨论】:

  • 您运行的是哪个 IIS 版本?
  • 我们在 IIS 7.5 上运行,但计划部署到 Azure,它似乎也基于 7.5。

标签: image iis mod-rewrite redirect uri


【解决方案1】:

使用URL Rewrite,您可以做到这一点。

匹配 /images/* 并重定向到 https://myarea.blob.core.windows.net/images/...

<system.webServer>
    <rewrite>
        <rules>
            <rule name="images to azure" stopProcessing="true">
                <match url="/images/(.*)" />
                <action type="Redirect" url="https://myarea.blob.core.windows.net/images/{R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

【讨论】:

  • 我可能会依赖此选项,但我将尝试寻找不依赖于安装任何第 3 方扩展的解决方案。我计划在 Azure 中运行我的应用程序,因此最好使用 .NET 原生的东西。我目前正在考虑使用 IRouteHandler 之类的东西。
  • @QF_Developer 因为您使用的是 IIS 7.5,所以重写模块已经是您安装的一部分(它不是第 3 方扩展)。我相信这是做你想做的最简单的方法!
  • 我尝试了上面的示例,但没有成功,并且 web.config 抱怨“rewrite”是无效的子元素。在 VS 中调试时这会起作用吗?我从 Visual Studio 开发服务器启动。
  • 好的,我看到重写只能在 IIS 中工作。我会尝试在 IIS Express 中调试。
  • 重写现在正在工作,但我最终得到以下结果。 myarea.blob.core.windows.net/images//testimage.png我正在尝试调整正则表达式以消除重复的正斜杠。
猜你喜欢
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多