Правила.htaccess не позволяют sm2 загружать mp3-файлы моего сайта на Android и iPad
Я использую.htaccess в директории assets/audio моего приложения, чтобы предотвратить прямую загрузку файлов mp3, воспроизводимых с помощью /questions/tagged/soundmanager2. Ниже приведен код.htaccess, который находится в каталоге assets/audio:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?quran\.2index\.net [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?quran\.2index\.net.*$ [NC]
RewriteRule \.(gif|jpg|mp3)$ - [R=401]
ErrorDocument 401 /e401.html
AddType audio/mpeg mp3
С помощью рабочего стола (Windows 7) любой веб-браузер может воспроизводить звуки с помощью soundmanager2. Демонстрационная версия находится по следующему адресу: http://quran.2index.net/viewAyah/1
Проблема в веб-браузере Android, опере на Android и Safari на iPad (те, с которыми я только что тестировал). Эти браузеры не могут загрузить аудиофайл mp3, и файл загрузки выскочил!
Самое странное для меня, когда я закомментирую все строки рассмотренного выше.htaccess (кроме первой и последней), SM2 отлично работает на Android и iPad!
Интересно, какова связь между серверным.htaccess и клиентским веб-клиентом? Или в чем проблема.htaccess, которая делает SM2 прекрасно работающим с любым браузером на рабочем столе Windows7, в то время как он не работает на веб-браузере Android и iPad?! Есть какие-нибудь предложения?
1 ответ
Soundmanager2 переключается с Flash на html5 для iphone, ipad (и, я полагаю, Android), и этот элемент html5 не предоставляет тег http_referer, когда он пытается получить медиафайл, который ему необходим для воспроизведения. Поэтому файл.htaccess отклоняет его запрос, выдавая запрещенный ответ.
Мне удалось найти кого-то еще на Stackru с этой проблемой (хотя видео в html5). Решением является добавление теста user_agent в файл.htaccess. Я проверил решение этого потока, и оно также решает мою проблему с Soundmanager2.
.htaccess HTTP_USER_AGENT не работает
Хотя это не отказоустойчивое решение (как мне сказали, информация заголовка может быть перезаписана любым, кто хочет обойти эту проверку user_agent), это обходной путь, который заставляет игрока работать...
[решение, скопированное по ссылке выше, приведет к следующему для этого конкретного вопроса]
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !(Android|iPod|iPhone|iPad) [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?quran\.2index\.net [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?quran\.2index\.net.*$ [NC]
RewriteRule \.(gif|jpg|mp3)$ - [R=401]
ErrorDocument 401 /e401.html
AddType audio/mpeg mp3`