此问题的版本已多次发布,但我在此网站上找到的解决方案都没有到目前为止。我正在尝试重定向文件,而不是网页。我实际上需要知道这是否可能,因为我了解到PHP无法做到这一点。以下是我问过的上一个问题的答案:
Web服务器将首先检查它是否存在,如果存在,它将立即提供该文件。它不会通过任何PHP代码。因此,您无法编写任何拦截此请求并阻止它的PHP代码。
我们网站上有一个文件夹,其路径为/downloads/
,其中包含我们不希望任何人下载的文件。
我想在我们的主要JavaScript文件中添加一个脚本:
/downloads/
allowed_domain.com
,则允许访问/downloads/
if (top.location.pathname === '/downloads/private.zip') {
if (document.referrer !== "http://www.allowed_domain.com") {
document.location.path = "/downloads/private.zip";
}
else {
document.location.path = "/404";
}
}
我 无法 使用.htaccess。我们的托管服务提供商正在运行Nginx,而不是Apache。我已经尝试过使用Nginx配置代码了,但是我必须将它发送给他们才能实现,但它没有用,他们也无法帮助我。
是的,我知道这是一个用于限制访问的超级超级不安全的解决方案。我的公司正在开发一个更正式的解决方案,但在此之前,我需要实施一些临时措施来阻止缺乏计算机知识或动机的用户绕过重定向,这几乎是我的最后选择。
答案 0 :(得分:1)
这个问题在JavaScript中是无法解决的,即使是你提出的非常有限和不安全的方式。问题是对/downloads/private.zip
的请求直接返回该文件的内容 - 它不加载任何HTML页面,因此浏览器永远不会看到或执行该JavaScript代码。
解决此问题的方法是使用一个PHP文件来处理对该目录的任何请求,检查用户是否有权查看这些文件,然后返回所请求的文件或404.但是为此您需要一些配置形式,你已经告诉我们你也做不到。
第三个解决方案,一个非常愚蠢的解决方案,但在这种非常有限的情况下可以工作(对于不理想的用户)将是用一小段JavaScript替换所有到禁止的资源的链接用户要么是文件,要么是404页面。但是,根据您的问题,您似乎很可能会阻止来自您无法控制的网站的用户访问,在这种情况下,这也无法正常工作。
结论:如果您无法配置Web服务器,则这不是可解决的问题。