我们目前正在使用webroot内的文件夹来存储图像和视频,这些图像和视频将在需要登录的 View 中(使用常用的html图像助手)加载。
如何防止外部访问者仅执行site.com/img/photos/1.jpg
URL并可以访问图像?
据我了解,我不能真正使用媒体 View 在适当的 View 内渲染图像,也无法确定是否有通过htaccess操纵的解决方案。
哪个是最佳做法?
也许选择使用非webroot文件夹是最好的(尽管这会使文件存储部分变得更困难)?
正如poncha建议的那样,我尝试将主.htaccess文件编辑到此文件中
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !localhost
RewriteCond %{REQUEST_URI} ^app/webroot/img/
RewriteRule .* / [L,F]
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
但是重写基线似乎禁止访问整个站点,没有它,似乎对img的访问没有任何改变。
编辑2:
在webroot中编辑htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
# this RewriteCond is needed to avoid rewrite loops
RewriteCond %{REQUEST_URI} !^/app/webroot/
RewriteRule (.*) app/webroot/$1 [L,R]
RewriteCond %{HTTP_REFERER} !127.0.0.1
RewriteCond %{REQUEST_URI} ^/app/webroot/img/
RewriteRule .* - [L,F]
</IfModule>
最佳答案
这将检查Referer
http header 是否设置为包含您的域的内容,如果没有,则拒绝访问img/文件夹。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !site.com
RewriteCond %{REQUEST_URI} ^img/
RewriteRule .* / [L,F]
注意:如果有人想要窃取您的内容,很容易“破坏”此保护,但是,它确实防止了热链接,而无需生成某种脚本,该脚本可以通过所有图像/视频来检查是否可以访问应该被授予。
编辑:
如果您的网站不在
/
中,则有两种选择:RewriteBase
以反射(reflect)站点的基本uri(例如RewriteBase /app/webroot/
)RewriteCond
以反射(reflect)/
(例如RewriteCond ^app/webroot/img/
)的路径在您的情况下,首选第二个选项,因为那里还有其他规则
编辑2:
在您的情况下,整个集合应如下所示:
RewriteEngine on
RewriteBase /
# this RewriteCond is needed to avoid rewrite loops
RewriteCond %{REQUEST_URI} !^/app/webroot/
RewriteRule (.*) app/webroot/$1 [L,R]
RewriteCond %{HTTP_REFERER} !localhost
RewriteCond %{REQUEST_URI} ^/app/webroot/img/
RewriteRule .* - [L,F]
关于image - 在cakephp 2.0中保护图像/视频文件夹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11206432/