lighttpd mod_redirect https to http专门针对媒体文件类型

时间:2011-08-31 21:21:07

标签: redirect lighttpd

我在通过HTTPS服务HTML5媒体应用程序的cent-os linux机器上配置了lighttpd 1.4.26(ssl)。

我的目标是通过HTTP从同一个网络服务器通过应用程序提供媒体文件。

如果网络服务器位于https://www.media.com/且所有媒体都位于http://www.media.com/sharedmedia/XXXXX的各个子文件夹中,并且我通过html中的任何媒体文件的相对链接,通过http提供的页面,则我希望将.mp3,.mp4,.webm和.ogv文件的所有请求重定向到EXACT SAME URL但使用http而不是https ...

我的问题是我不知道如何编写url.redirect规则来执行此翻译...

我试过了:

url.redirect = ( "https://^(.*)\.(ogv|mp4|mp3|webm)$" => "http://%1/$1" )

当我访问此网址时:

https://www.media.com/sharedmedia/X-MAC-MINI/Sports/Amazing%20Football%20Skills%20and%20Tricks.ogv

我被永久重定向到

http://www.media.com/sharedmedia/X-MAC-MINI/Sports/Amazing0Football0Skills0and0Tricks.ogv

然后也是301':

http:///sharedmedia/AFFINEGY-MAC-MINI/Sports/Amazing0Football0Skills0and0Tricks

请注意,第一个url(urlencoded SPACE)中的%20是从URL中删除的,在第一次重定向期间每种情况下都留下尾随的'0'(我假设解释为%2,其中包含空字符串)并且http请求也被错误地重定向到另一个甚至不包含主机值的URL(www.media.com)。此外,扩展名不在第二个重定向...

然后我尝试了一个条件版本:

$HTTP["socket"] =~ ":443$"
{
url.redirect = ( "^(.*)\.(ogv|mp4|mp3|webm)$" => "http://%1/$1" )
}

..这导致lighttpd在启动时崩溃,所以我甚至无法测试它。 Lighttpd启动错误消息如下:

Starting lighttpd: 2011-08-31 16:19:15: (configfile.c.907) source: find /etc/lighttpd/conf.d -maxdepth 1 -name '*.conf' -exec cat {} \; line: 44 pos: 1 parser failed somehow near here: (EOL)
2011-08-31 16:19:15: (configfile.c.907) source: /etc/lighttpd/lighttpd.conf line: 331 pos: 1 parser failed somehow near here: (EOL)

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

这就是我做错了:

您需要嵌套的“IF”才能在目标IP规则中使用%n表示法...

我有

$HTTP["socket"] =~ ":443$"
{
url.redirect = ( "^(.*)\.(ogv|mp4|mp3|webm)$" => "http://%1/$1" )
}

但我需要

$HTTP["socket"] =~ ":443$" {
 $HTTP["host"] == (.*) {
 url.redirect = ( "^(.*)\.(ogv|mp4|mp3|webm)$" => "http://%1/$1.$2" )
 }
}

现在......“http://%1 / $ 1”中的%1表示“$ HTTP [”host“] ==(。*)中的匹配”,而$ 1表示网址中的匹配重定向parens,$ 2指的是url重定向源中第二组parens的匹配...

这只是我还是这个狗屎完全没有记录?我只能在谷歌上发现人们抱怨无法让这个工作起来,而且似乎没有人对它的运作方式有任何答案......

我现在卡住在APACHE中发生完全相同的事情,我找不到关于它的.htaccess 301重定向的好文档......