我一直在寻找和测试尽可能多的不同方法来做到这一点,但似乎没有任何效果。简而言之,我正在流式传输音频,但路径通过重写规则被混淆了。我不想通过浏览器直接访问流文件,但 PHP 仍然需要访问该文件才能流式传输它。以下是流式处理 URL:
www.test.com/audio/32478576
"音频"目录不存在。我正在使用 .htaccess 将其重定向到流式脚本。以下是 .htaccess 位:
RewriteRule ^/?audio/([d]+)/?$ serve.php?id=$1 [L,QSA]
一切都很好。因此,我认为拒绝访问该文件所需的只是将以下内容添加到我的.htaccss文件中:
<Files ~ "audio/">
order allow,deny
deny from all
</Files>
那行不通。我仍然能够直接从浏览器获取音频流。
也许这是不可能的 - 尝试做我想让它做的事情。我错过了什么?.htaccess无论如何都不是我的强项,但我仍然认为这是可能的。也许我只是没有正确的代码或顺序正确的东西。任何帮助将不胜感激。谢谢。
更新:
我的服务器设置可能有问题。我用以下重写进行了基本测试:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)test.com/.*$ [NC]
RewriteRule test.php$ - [F]
但我仍然可以直接访问测试.php文件。但是 - 我不应该,对吧?也许我的服务器上设置不正确?
<directory>
和<files>
指令适用于文件系统。由于/audio 目录不存在,因此<Files ~ "audio/">
不起作用。<Location>
指令适用于 Url,并且可能有效。
在另一种方法中,如果 Apache 版本是 2.4,则可以按照本文档页面 http://httpd.apache.org/docs/current/howto/access.html 中所述进行操作。
据我了解,您希望防止在您的域 test.com 之外访问服务.php。如果是这样,那么HTTP_REFERRER应该是包含 test.com 的 url。
可以使用防止媒体文件热链接的代码从 htaccess 检查HTTP_REFERRER。此链接:https://mediatemple.net/community/products/dv/204644230/prevent-hotlinking-with-a-htaccess-file 介绍如何防止媒体文件的热链接。可以修改链接中给出的代码,以防止 serv.php 文件的热链接。以下代码应该有效:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)test.com/.*$ [NC]
RewriteRule audio/.+$ - [F]