lighttpd mod_redirect https для http специально для типов файлов мультимедиа - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть конфигурация lighttpd 1.4.26 (ssl) на компьютере linux, обслуживающем медиа-приложение HTML5 через HTTPS.

Моя цель - обслуживать медиа-файлы через приложение через HTTP из того жевеб сервер.

Если веб-сервер был расположен по адресу https://www.media.com/, а все мультимедиа расположены в различных подпапках http://www.media.com/sharedmedia/XXXXX,, и у меня есть относительные ссылки на любой медиафайл в html для обслуживаемых страниц.через http, тогда я хочу, чтобы все запросы к файлам .mp3, .mp4, .webm и .ogv были перенаправлены на ТОЧНЫЙ ЖЕ URL, но с использованием http вместо https ...

Моя проблема в том, что я делаюне знаю, как написать правило url.redirect для выполнения этого перевода ...

Я пытался:

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

И когда я посещаю этот URL:

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

Я 301 постоянно перенаправлен на

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

, который затем также 301 с:

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

Обратите внимание, что% 20, которые были в самом первом URL (urlencoded SPACE)) были удалены из 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 голосов
/ 01 сентября 2011

Вот что я сделал не так:

Чтобы использовать нотацию% n в целевом IP-правиле, требуется вложенный «IF» ...

у меня было

$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" )
 }
}

Теперь ...% 1 в "http://%1/$1" относится к совпадению в" $ HTTP ["host"] == (. *) ", В то время как $ 1 относится к совпадению в скобках перенаправления URL, а $ 2 относится к совпадению чтобы соответствовать второму набору паренов в источнике перенаправления URL ...

Это только я, или это дерьмо ПОЛНОСТЬЮ без документов? Я могу только найти в Google людей, жалующихся на то, что они не могут заставить это работать, и ни у кого, кажется, нет единственного ответа на то, как это работает ...

Сейчас я застрял, заставляя ТОЧНО повторить то же самое в APACHE, и не могу найти хорошую документацию по перенаправлениям .htaccess 301 для него ...

...