如何在web.config文件中为特定文件类型创建重定向?

时间:2014-06-09 11:07:54

标签: iis web-config http-redirect

我有一个拥有数千个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中文件类型的嗅探和重定向。这甚至可能吗?

3 个答案:

答案 0 :(得分:2)

以下重写规则将您描述的路径模式的所有请求重定向到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.comdownloadtracker.domain.com托管在同一个IIS实例上。如果不是这种情况,则可以省略该条件。

另请注意,您可能希望将redirectTypePermanent(导致301)更改为Found(导致301)如果该措施只是暂时的,并且您不希望客户记住新的位置。

答案 1 :(得分:0)

我没有加载虚拟机来测试这个,但是类似于下面的重写规则应该可行。 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>

答案 2 :(得分:0)

如果很难为重定向配置IIS,最终可以考虑使用反向代理,例如apache服务器。 Apache擅长反向代理,即透明地将发送到URL的所有流量转发给另一个。

从模块mod_proxy上的apache 2.4 doc中提取,指令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解决方案。但是如果你有很多流量或强烈的安全问题,也许它会很有用。