在web.config中将子文件夹重写为子域

时间:2013-01-10 23:26:25

标签: asp.net iis-7 web-config subdomain url-rewrite-module

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

用户尝试加载此图片:

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答案的选项正在运作......

UPDATE2:虽然在我的特殊情况下,cheesemacfly无法帮助我,但我给了他赏金,并将他的答案标记为已接受的答案,因为他超越了我试图帮助我聊天。希望他的回答可以帮助重写IIS的人。

2 个答案:

答案 0 :(得分:7)

修改

为了能够将网址重写(而且不仅仅是重定向)到外部网站,您需要安装Application Request Routing module并启用代理模式。

这样做:

  1. Download and install the module
  2. 打开IIS管理控制台(inetmgr
  3. 选择您的服务器节点
  4. 双击Application Request Routing CacheARR
  5. 点击Server Proxy Settings窗格(屏幕右侧)
  6. 上的Actions
  7. 选中Enable proxy框,然后点击Apply proxy
  8. 第二步是建立规则。

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

    <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测试模式工具。

    在您网站的根目录 - &gt;网址重写 - &gt;创建一个空白规则 - &gt;点击测试模式: Pattern test

    如果没有得到预期的结果,可以使用Failed Request Tracing tool

    调试重写

答案 1 :(得分:0)

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

<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>