我想要实现的是:
我希望能够仅在我的域上的浏览器上显示 ( mp4
| jpg
| ico
) 文件类型并执行 ( js
| ) 文件类型,但我不希望他们通过在浏览器地址栏上键入 URL 来直接访问这些文件。css
我所期望和所做的是
熟悉 PHP 后$_SERVER['HTTP_REFERER']
,我得到一个像这样的 URLhttp://域名.xyz/main.php但我不知道是否同样如此.htaccess
。因为 with .htaccess
, the HTTP_REFERER
, 使用像这样的正则表达式模式^https?://(www.)?domainname\.xyz/.*$
,但是如果我使用 URL 的模式,https?://(www.)?domainname\.xyz/main.php
我可以在 上硬编码该确切的 URL .htaccess
。这样的 URL 会导致错误,因此我遵循站点中的代码并将其合并到我的脚本中。我不是 htaccess 正则表达式方面的专家。
因此,我将下面的 .htaccess 作为研究结果并从各个站点进行跟踪:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https?://(www.)?domainname\.xyz/.*$ [NC]
RewriteRule \.(jpg|js|css|mp4)$ - [NC,F,L]
我也尝试使用以下来自各个站点的代码:
SetEnvIf Referer "!^https?://(www.)?domainname\.xyz/.*$" localreferer
<FilesMatch "\.(jpg|js|css|mp4)$">
Require env localreferer
</FilesMatch>
上面的代码当前发生的情况是:
使用上述.htaccess
脚本,浏览器上仅mp4
显示文件类型,无法通过浏览器地址栏上的 URL 直接访问并显示403 Forbidden
错误。
所有其他文件类型都在浏览器上显示/执行,也可以使用 URL 在地址栏上直接访问它们。
帮助
我在这方面寻求您的帮助,因为我不是 htaccess、正则表达式方面的专家。我已经研究了好几天了,仍然没有解决。在您的帮助下,我的知识将会增长。
答案1
你想要的东西是不可能的。要执行 JavaScript 程序或应用 CSS 格式文件,您的浏览器必须下载这些文件。那是确切地与打开浏览器 URL 栏中输入的 URL 的机制相同。
另外,即使获取数据的方法不同:浏览器有以某种方式获取数据。那一刻它就在您的用户的计算机中,因此不受您的服务器的控制。
您将不得不面对这样一个事实:网站、嵌入式 JS 和 CSS 是在用户计算机上运行的程序。为此,他们从您的服务器获取这些东西。没有办法解决这个问题。
答案2
为了纠正您的解决方案的开始路径,我的第一个猜测是更改您的正则表达式:
\.(jpg|js|css|mp4)($|\?|&)
由于缺乏信息(请参阅我的最后评论这里)我只能猜测将请求的真实 URI。
您最好选择FileMatch
- 变体。
但请注意“通过引用者阻止”并不是真正的安全。浏览器或其插件可以自动操作引用者:
如果你期望绝对的保护,我只能说马库斯·穆勒和拉蒂尔绝对保护是不可能的,这是正确的。您只能加大力度提取文件的真实URI,或者通过用户访问控制或加密解决方案(即DRM)来限制受众。