我有一个有趣的难题……我正在WAMP服务器上托管多个.mp4文件。我很清楚在文件根目录之外存储文件并在检索文件内容之前使用PHP脚本对用户进行身份验证的方法。但是,这些.mp4文件必须位于文档根目录内。有什么方法可以验证试图直接访问这些文件之一的用户?我已经尝试过.htaccess重写,它接受以“ .mp4”结尾的请求URL,并重定向到PHP脚本,该脚本将请求的文件作为参数传递,但是当然这会循环。
这是.htaccess文件中的重写规则...
RewriteEngine on
RewriteRule ^(.*).mp4$ /media/auth.php?file=$1.mp4
想法是,用户将尝试访问http://www.example.com/media/myVideo.mp4,此请求将被路由到PHP脚本(auth.php),该脚本将使用$_GET['file']
从URL提取请求的文件,它将使用$_SESSION
变量对用户进行身份验证,然后使用用户header('Location: ' . $file)
将经过身份验证的用户发送到实际文件。再一次,我在实现这一点后很快意识到它将循环...
任何帮助将不胜感激。谢谢!
这就是为什么它们不能超出文档根目录的原因...
@IdontDownVote,非常复杂,但是我将尝试使用一个简短的版本...我认为这最适合与doc根目录之外的文件配合使用,但存在一个严重问题。当我使用PHP脚本访问文件时,可以在Chrome浏览器中查看视频,播放,暂停,倒带等全部内容。唯一的(大)问题是当我使用此方法时,无法投射视频。当我直接访问.mp4文件时,它为我提供了下载或投射的选项,但是使用PHP脚本时,只有下载选项可用。相信我,我已经尝试了一切,包括与两名Google开发人员进行讨论。我在这里没有高兴地在Stack Overflow上发布了关于此问题的信息...
Why can't I cast an MP4 file served by PHP from outside of the document root?
我不确定为什么这会被否决,这让我很头疼,我只是在寻找建议...
答案 0 :(得分:1)
首先要通过PHP在文档根目录之外提供文件时对它进行测试吗?
当我直接访问.mp4文件时,它为我提供了下载或投射的选项,但使用了PHP脚本
如果可以的话,您可以简单地阻止对除一个PHP文件之外的所有文件的访问,并使用该文件将其抛出(您也可以允许访问*.php
。
#.htaccess
Order Deny,Allow
Deny from all
<Files index.php>
Allow from all
</Files>
这将仅允许在htacccese所在的任何文件夹(和子文件夹)中访问index.php
。如果您要使用PHP中已有的登录系统,则可能会更好。为您的用户。
如果不能,那么我唯一能做的就是尝试使用BasicAuth和Htaccess,如下所示:
#.htaccess
Order Deny,Allow
Deny from all
AuthType Basic
AuthName "Admin Only"
AuthUserFile /pathto/.htpasswrd
require valid-user
Allow from all
然后在名为.htpasswrd的文件中放置一些类似的内容:
admin:$apr1$o48wfurr$5WaWCjD85kBu/ydGKsQeq/
您可以使用类似这样的方式来哈希密码。
http://www.htaccesstools.com/htpasswd-generator/
然后,当您为Chrome提供URL时,必须包含user:pass@
部分以绕过登录。
http://user:pass@somedomain/path/to/video.mp4
如果您不想将其与现有的登录名绑定,则必须创建一些系统以将htpasswrd文件中的密码同步到您的用户。那真的不应该太难。我做了一个将我们的站点用户帐户同步到sFTP服务器的方法,这确实很麻烦,因为安全性高,我们有3台sFTP服务器(旧版,普通版和开发版)。无论如何,您基本上只需要保留其用户/密码列表,然后在创建/删除用户或更改其密码时更新文件。
也许会起作用(老实说,我不知道...大声笑)。
值得一试。