我正在尝试为以下场景编写重写规则。
用户尝试加载此图片:
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 重写的人有所帮助。
最佳答案
编辑:
为了能够重写(而不仅仅是重定向)外部网站的 URL,您需要安装 Application Request Routing module并启用代理模式。
要这样做:
- Download and install the module
- 打开 IIS 管理控制台 (
inetmgr
) - 选择您的服务器节点
- 双击
应用程序请求路由缓存
: - 点击
操作
Pane (屏幕右侧)上的服务器代理设置
- 选中
启用代理
复选框,然后单击应用
第二步是设置规则。
如果您希望重写基于路径,请使用以下代码:
<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 调试重写。
关于asp.net - 将 web.config 中的子文件夹重写为子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269149/