如何在 web.config 文件中为特定文件类型创建重定向?
Posted
技术标签:
【中文标题】如何在 web.config 文件中为特定文件类型创建重定向?【英文标题】:How to create a redirect in a web.config file for a specific file type? 【发布时间】:2014-07-29 22:02:39 【问题描述】:我有一个包含数千个 mp3 文件的大型播客网站。我在 Windows Azure 上运行 Wordpress。我最近移动了服务器并更改了 url 结构。
过去所有的mp3文件都被引用(粗略的例子,有几千个文件)
位于 http://www.domain.com/podcasts/podcastname/filename.mp3 -
它们现在位于 http://downloadtracker.domain.com/podcasts/podcastname/filename.mp3
唯一的区别是子域从“www”变为“downloadtracker”
我已经手动修复了所有内部链接 - 但有许多我无法控制的入站链接。我想做的是在 web.config 中创建一个规则,嗅探对 mp3 文件的请求并将请求重定向到新的子域。我希望它为每个 mp3 文件自动重定向(我不必手动编码每个 mp3 路径)
我没有看到根据 web.config 中的文件类型进行嗅探和重定向的方法。这可能吗?
【问题讨论】:
这不应该与 wordpress 或 azure 相关(删除标签?)。您是指目标 URI 的 downloadtracker.domain.com/podcasts/podcastname/filename.mp3 吗?你看过 IIS 重写规则吗? 这是一个在 Azure 上运行的 wordpress 站点 - 我确实希望将 downloadtracker.domain.com/podcasts/podcastname/filename.mp3 重定向到用户的位置。 我没有看过 IIW 重写规则,只是 web.config 的 【参考方案1】:以下重写规则将所有请求重定向到具有您描述的路径模式的 MP3 文件到新主机。
<rule name="redirect MP3s" stopProcessing="true">
<match url="^podcasts/.*/.*.mp3$" />
<conditions>
<add input="HTTP_HOST" pattern="downloadtracker.domain.com" ignoreCase="true" negate="true" />
</conditions>
<action type="Redirect" url="http://downloadtracker.domain.com/R:0" redirectType="Permanent" />
</rule>
请注意,如果www.domain.com
和downloadtracker.domain.com
都托管在同一个IIS 实例上,条件(检查主机是否还没有我们要重定向到的位置)会阻止重定向循环。如果不是这种情况,可以省略条件。
另外请注意,如果措施只是临时的并且您不希望将希望客户记住新位置。
【讨论】:
【参考方案2】:如果 IIS 难以为该重定向配置,您最终可以考虑使用反向代理,例如 apache 服务器。 Apache 擅长反向代理,即将发送到一个 URL 的所有流量透明地转发到另一个。
从模块mod_proxy
上的apache 2.4文档中提取,指令ProxyPass
:
Suppose the local server has address http://example.com/; then
<Location /mirror/foo/>
ProxyPass http://backend.example.com/
</Location>
will cause a local request for http://example.com/mirror/foo/bar to be internally converted into a proxy request to http://backend.example.com/bar.
因此,您只需安装一个监听 www.domain.com
的 Apache 服务器。魔术指令将是:
<Location /podcasts/podcastname/>
ProxyPass http://downloadtracker.domain.com/podcasts/podcastname/
</Location>
出于安全原因、负载平衡等原因,目前在大型数据中心拥有反向代理...
编辑:
我必须承认,只有当您已经在生产环境中拥有(或计划拥有)此类反向代理时,所有这些才有意义。如果您使用其他反向代理,例如nginx
,它也应该很容易。当然,我没有反向代理,也不需要,最好坚持使用 IIS 解决方案。但是,如果您有大量流量或强烈的安全问题,也许它会很有用。
【讨论】:
【参考方案3】:我没有加载虚拟机来测试这个,但类似于下面的重写规则应该可以工作。 URL 可能需要是相对的而不是绝对的。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Rule Name" stopProcessing="true">
<match url="http://www.domain.com/podcasts/podcastname/filename.mp3" />
<action type="Rewrite" url="http://downloadtracker.domain.com/podcasts/podcastname.mp3" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
【讨论】:
这对每个 mp3 文件都有效吗?我正在尝试对 mp3 文件的每个请求进行重定向(有几千个)。 对于您需要执行的每个 mp3 文件以上是关于如何在 web.config 文件中为特定文件类型创建重定向?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 中为自定义配置文件添加配置转换?
我可以在 web.config 中为 maxJsonLength 设置无限长度吗?