我在通过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)
任何想法我做错了什么?
答案 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重定向的好文档......