Apache 限制来自特定域解决方案的访问/媒体资源请求,而不是通过.htaccess直接访问

Apache 限制来自特定域解决方案的访问/媒体资源请求,而不是通过.htaccess直接访问,apache,.htaccess,Apache,.htaccess,我想创建一个域,例如,media.mywebpage.com来存储媒体访问 然后,我希望限制直接访问和其他领域没有白名单。这意味着人们不能直接在浏览器中键入media.mywebpage.com/img/foo.png,然后返回403 但是将一个域列入白名单,例如,blog.mywebpage.com。允许来自此域的所有请求,然后返回对网页的正确媒体访问权限(状态200) 请注意,media.mywebpage.com是一个媒体库,我希望从此域的根目录修改.htaccess。通常使用路由脚本来访

我想创建一个域,例如,
media.mywebpage.com
来存储媒体访问

然后,我希望限制直接访问和其他领域没有白名单。这意味着人们不能直接在浏览器中键入
media.mywebpage.com/img/foo.png
,然后返回403

但是将一个域列入白名单,例如,
blog.mywebpage.com
。允许来自此域的所有请求,然后返回对网页的正确媒体访问权限(状态200)


请注意,
media.mywebpage.com
是一个媒体库,我希望从此域的根目录修改.htaccess。

通常使用路由脚本来访问此类资源。通过直接链接或将传入请求重写到该路由脚本。该脚本显然允许您执行您想要的任何授权检查。是的,这意味着实际的媒体资源不应该是http服务器发布的文件系统部分的一部分:

RewriteEngine on
RewriteRule ^/?img/ /path/to/script.php [END]
然后
script.php
(显然不一定是php脚本)可以执行授权检查,例如通过测试referer域(请记住,这种检查很容易欺骗,因为referer头很容易欺骗)。例如,您可以在php中计算
$\u服务器['HTTP\u REFERER']
超全局变量。或者任何你想要的。如果授权被授予,则脚本读取并分发媒体资源作为对请求的响应,否则返回401头。这种方法的优点是,您可以灵活地处理脚本实际应该做的事情,特别是对于以后的扩展,如基于用户的会话或其他什么

另一种方法是在http服务器级别直接实现此功能,但如上所述,这是有限的:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^blog\.mywebpage\.com$ [NC]
RewriteRule ^ - [E=401]

这两种方法都不完全可靠。试图用这种方式防止热链接有时有效,有时无效。问题是,考虑到您明确发布了资源,您为什么要拒绝对资源的访问…

通常使用路由脚本来访问此类资源。通过直接链接或将传入请求重写到该路由脚本。该脚本显然允许您执行您想要的任何授权检查。是的,这意味着实际的媒体资源不应该是http服务器发布的文件系统部分的一部分:

RewriteEngine on
RewriteRule ^/?img/ /path/to/script.php [END]
然后
script.php
(显然不一定是php脚本)可以执行授权检查,例如通过测试referer域(请记住,这种检查很容易欺骗,因为referer头很容易欺骗)。例如,您可以在php中计算
$\u服务器['HTTP\u REFERER']
超全局变量。或者任何你想要的。如果授权被授予,则脚本读取并分发媒体资源作为对请求的响应,否则返回401头。这种方法的优点是,您可以灵活地处理脚本实际应该做的事情,特别是对于以后的扩展,如基于用户的会话或其他什么

另一种方法是在http服务器级别直接实现此功能,但如上所述,这是有限的:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^blog\.mywebpage\.com$ [NC]
RewriteRule ^ - [E=401]
这两种方法都不完全可靠。试图用这种方式防止热链接有时有效,有时无效。问题是,考虑到您明确发布了资源,您为什么要拒绝对资源的访问