9

我正在尝试为以下场景编写重写规则。

用户尝试加载此图片:

domain.com/images/folder/picture.jpg

相反,我需要它来加载:

cdn.domain.com/images/folder/picture.jpg.

这是我所拥有的不起作用的:

<rule name="CDN rewrite for Images">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="domain.com" />
        <add input="{REQUEST_URI}" pattern="^/images/folder/(.*)$" />
    </conditions>
    <action type="Rewrite" url="cdn.domain.com/images/folder/{C:1}" />
</rule>

更新: 添加附加信息。大多数图片都是从 Joomla 提供的,因此虽然域的根目录类似于 domain.com,但大多数图片都是使用 src="/images/folder/picture.jpg" 输入的,不太清楚这对重写有何影响,但是下面cheesemacfly的答案中没有一个选项有效......

更新 2: 虽然 cheesemacfly 在我的特殊情况下无法帮助我,但我授予他赏金并将他的答案标记为已接受,因为他在聊天中竭尽全力帮助我。希望他的回答能帮助那些在 IIS 上重写的人。

4

2 回答 2

10

编辑:

为了能够将 URL 重写(而不仅仅是重定向)到外部网站,您需要安装应用程序请求路由模块并启用代理模式。

为此:

  1. 下载并安装模块
  2. 打开 IIS 管理控制台 ( inetmgr)
  3. 选择您的服务器节点
  4. 双击Application Request Routing CacheARR
  5. 单击窗格(屏幕右侧Server Proxy SettingsActions
  6. 选中该框Enable proxy并单击Apply 代理人

第二步是关于设置你的规则。

如果您希望重写基于路径,请使用以下代码:

<rewrite>
  <rules>
    <rule name="Rewrite to cdn domain">
      <match url="^images/folder/(.+)$" />
      <action type="Rewrite" url="http://cdn.domain.com/images/folder/{R:1}" />
    </rule>
   </rules>
</rewrite>

或者,如果您在第二个网站上保留相同的文件夹架构,您可以简化如下:

<rewrite>
  <rules>
    <rule name="Rewrite to cdn domain">
      <match url="^images/folder/(.+)$" />
      <action type="Rewrite" url="http://cdn.domain.com/{R:0}" />
    </rule>
   </rules>
</rewrite>

如果您只想捕获以特定扩展名结尾的文件(比如说图像):

<rewrite>
  <rules>
    <rule name="Forward to cdn domain">
      <match url="^images/folder/.+\.(?:jpg|bmp|gif)$" />
      <action type="Rewrite" url="http://cdn.domain.com/{R:0}" />
    </rule>
  </rules>
</rewrite>

请参考:http ://www.iis.net/learn/extensions/url-rewrite-module/iis-url-rewriting-and-aspnet-routing (“您应该使用哪个选项? ”部分)

小费:

测试模式的最佳方法是使用 IIS 测试模式工具。

在您网站的根目录 -> URL 重写 -> 创建空白规则 -> 单击测试模式: 模式测试

如果您没有得到预期的结果,您可以使用Failed Request Tracing 工具调试您的重写

于 2013-01-18T20:03:11.843 回答
1

注意:将规则更改为重定向而不是重写可以解决问题。理想情况下,您希望它是一个重定向,但我花了很多时间试图让重写工作,到目前为止还没有解决方案。

<rule name="Rewrite to images.cdn.com" enabled="true" stopProcessing="true">
<match url="images/(.+)$" ignoreCase="true" />
<action type="Redirect" url="http://images.cdn.com/{R:1}" />
</rule>
于 2013-01-31T05:15:22.057 回答