【问题标题】:download via HTTP_REFERER in .htaccess通过 .htaccess 中的 HTTP_REFERER 下载
【发布时间】:2017-05-11 07:04:51
【问题描述】:

我有 2 个域,一个是 allow-site.com,另一个是 resource.com。

resource.com 的文件结构是:

root
 |--- videos
 |      |---> 01.mp4
 |      |---> 02.avi
 |--- index.php
 |--- .htaccess
 |

index.php 包含如下下载链接:

<a href="http://localhost/resource/videos/01.mp4" download>Download</a>

.htaccess 中,我只通过 HTTP_REFERER RewriteCond 允许 allow-site.com 域,它允许 allow-site.com 的视频播放器正确播放视频。

.htaccess 文件是:

RewriteEngine On
RewriteBase /

# allow these referers to passthrough
RewriteCond %{HTTP_REFERER} ^http://localhost/allow [NC]
RewriteRule ^ - [L]

# redirect everything else
RewriteRule ^ https://google.com/ [R,L] 

我不希望任何人使用视频链接,除非它们来自 allow-site.com,这是这个 .htaccess 文件的目的,它工作正常。

但主要问题是当我点击下载链接时,它下载的是 HTML 文件而不是视频。如果我忽略RewriteRule ^ https://google.com/ [R,L],它会按预期工作(视频下载正常),但任何其他域的任何人都可以使用这些视频。

我不明白如何解决这个问题。

谢谢。

【问题讨论】:

  • 我不确定我在说什么,因为我不经常使用 apache,但你不能让你的 htaccess 为每个不是 localhost/allow 的引用者重定向到谷歌吗?那么直接链接呢?没有推荐人?
  • 我猜下载属性不会发送引荐来源网址,因此您的重写规则会强制用户下载谷歌主页。在 Chrome 开发工具中检查发送的请求头购买下载请求,您将能够查看是否有推荐人(我猜没有)
  • 对不起,这是我的 localhost 项目

标签: php apache .htaccess mod-rewrite video


【解决方案1】:

链接上的download 属性可能会默认去除引荐来源网址,因此用户下载的是谷歌主页的来源而不是视频,因为RewriteCond 没有被满足,RewriteRule 开始了。

您可以尝试在链接上强制使用referrerpolicy="origin",看看它是否能解决问题,但目前似乎没有得到很好的支持 (http://caniuse.com/#feat=referrer-policy)

此外,您的重写规则可以简化为:

RewriteEngine On
RewriteBase /

# allow these referers to passthrough
RewriteCond %{HTTP_REFERER} !^http://localhost/allow [NC]
RewriteRule ^ https://google.com/ [R,L] 

【讨论】:

  • 我使用 referrerpolicy="origin"。但它重定向到 google.com。
  • 我猜推荐人策略只适用于普通链接,但不适用于下载链接。如果删除下载属性会发生什么?我想你可以在新标签中播放视频好吗? (不能解决问题,但有趣的是要测试以排除)
  • 不,它没有播放视频。它重定向到谷歌主页
  • 有趣...在您测试过的所有浏览器中,您是否得到相同的行为?
  • 是的,所有(chome、firefox、uc 和 ms edge)都一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多