我有一个拥有数千个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中文件类型的嗅探和重定向。这甚至可能吗?
答案 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.com
和downloadtracker.domain.com
托管在同一个IIS实例上。如果不是这种情况,则可以省略该条件。
另请注意,您可能希望将redirectType
从Permanent
(导致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解决方案。但是如果你有很多流量或强烈的安全问题,也许它会很有用。