0

我在应用程序的 assets/audio 目录中使用 .htaccess 来防止直接下载使用播放的 mp3 文件。下面是 .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 播放声音。在以下 URL 上可以找到现场演示:http: //quran.2index.net/viewAyah/1

问题在于 Android 网络浏览器、Android 上的opera 和 iPad 的 Safari(我刚刚测试过的那些)。那些浏览器无法加载 mp3 音频文件并弹出下载文件!

对我来说最奇怪的是,当我注释掉上面提到的 .htaccess 的所有行(除了第一行和最后一行)时,SM2 在 Android 和 iPad 上都可以正常工作了!

我想知道,服务器端 .htaccess 和客户端 Web 客户端之间有什么关系?或者 .htaccess 中有什么问题使 SM2 在 Windows7 桌面上的任何浏览器上都能正常工作,而在 Android 网络浏览器和 iPad 上却不能工作?!有什么建议吗?

4

1 回答 1

2

Soundmanager2 从 Flash 回退到 html5 用于 iphone、ipad(我假设是 Android),并且这个 html5 元素在尝试检索它需要播放的媒体文件时不提供 http_referer 标签。.htaccess 文件因此通过抛出禁止响应来拒绝其请求。

我已经能够在 Stackoverflow 上找到其他人解决这个问题(尽管是 html5 中的视频)。解决方案是在 .htaccess 文件中添加 user_agent 测试。我已经测试了该线程的解决方案,它也解决了我的 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`
于 2013-05-22T16:09:14.377 回答