【问题标题】:Rewrite Subfolder to Subdomain in web.config在 web.config 中将子文件夹重写为子域
【发布时间】:2012-12-25 12:04:28
【问题描述】:

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

用户尝试加载此图片:

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 上重写的人。

【问题讨论】:

  • 模式 ^/images/stories/catalogue/(.*)$ 与您的输入 domain.com/images/folder/picture.jpg 不匹配。那是错字吗?您在这里想要做的是将任何请求(如domain.com/images/folder/*)重定向到cdn.domain.com/images/folder/*,并保留请求的文件名/路径,对吗?
  • 这是一个错字。上面更正了。是的,你对重写是正确的。我在我的 CDN 上使用 origin-pull
  • 对不起,我无法为您提供更多帮助...如果您找到解决方案,我很乐意看到!
  • 我已经用我最近发现的内容更新了我的答案。让我知道是否有帮助...

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


【解决方案1】:

编辑:

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

这样做:

  1. Download and install the module
  2. 打开您的 IIS 管理控制台 (inetmgr)
  3. 选择您的服务器节点
  4. 双击Application Request Routing Cache:
  5. Actions 窗格(屏幕右侧)上单击Server Proxy Settings
  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 tool调试你的重写

【讨论】:

  • 您的所有变体均无效。当我使用它们中的任何一个时,它都会“破坏”图片。看源码的时候,因为有些来自Joomla,所以一张图片有src="/images/folder/picture.jpg" 作为例子。
  • 你有点迷失了我...你有一个使用 IIS7 上托管的图像的 Joomla 网站?这个 Joomla 网站在哪里托管?
  • 这是 IIS 7 上的 Joomla 安装
  • 并且使用上述解决方案之一,如果您在浏览器中调用domain.com/images/folder/picture.jpg,它会将您重定向到cdn.domain.com/images/folder/picture.jpg吗?
  • 没错。保存 web.config 后,图像“中断”并且不再可见。如果我尝试在浏览器中访问图像 URL,它会返回 404
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2010-12-28
    • 2018-08-28
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多