Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript基于referer从文件重定向_Javascript_Redirect - Fatal编程技术网

使用JavaScript基于referer从文件重定向

使用JavaScript基于referer从文件重定向,javascript,redirect,Javascript,Redirect,这个问题的版本已经发布了很多次,但是我在这个网站上找到的所有解决方案到目前为止都不起作用。我试图从文件中重定向,而不是网页。我实际上需要知道这是否可能,因为我知道PHP无法做到这一点。下面是我之前问的一个问题的答案: web服务器将首先检查它是否存在,如果存在,它将立即提供该文件。它不经过任何PHP代码。因此,您不能编写任何PHP代码来拦截并阻止该请求 我们网站上有一个路径为/downloads/的文件夹,其中包含我们不希望任何人下载的文件 我想在我们的主JavaScript文件中添加一个脚本,

这个问题的版本已经发布了很多次,但是我在这个网站上找到的所有解决方案到目前为止都不起作用。我试图从文件中重定向,而不是网页。我实际上需要知道这是否可能,因为我知道PHP无法做到这一点。下面是我之前问的一个问题的答案:

web服务器将首先检查它是否存在,如果存在,它将立即提供该文件。它不经过任何PHP代码。因此,您不能编写任何PHP代码来拦截并阻止该请求

我们网站上有一个路径为
/downloads/
的文件夹,其中包含我们不希望任何人下载的文件

我想在我们的主JavaScript文件中添加一个脚本,它说:

  • 如果文件是
    /downloads/
  • 如果用户来自referer
    allowed\u domain.com
    ,则允许访问
    /downloads/
  • 其他重定向到主页或404
我的尝试(没有成功) 约束条件 我无法使用.htaccess。我们的主机提供商正在运行Nginx,而不是Apache。我尝试过使用Nginx配置代码,但我必须将其发送给他们来实现,但它不起作用,他们也不会帮助我


是的,我知道这是一个超级、超级不安全的限制访问的解决方案。我的公司正在研究一个更正式的解决方案,但在此之前,我需要实施一些临时措施,以阻止缺乏计算机知识或缺乏绕过重定向动机的用户,这几乎是我最后的选择。

这个问题在JavaScript中无法解决,即使是以你提议的非常有限和不安全的方式。问题是对
/downloads/private.zip
的请求直接返回该文件的内容-它不会加载任何HTML页面,因此浏览器将永远不会看到或执行该JavaScript代码

解决这个问题的一种方法是使用一个PHP文件来处理对该目录的任何请求,检查用户是否有权查看这些文件,然后返回请求的文件或404。但为此,您需要某种形式的配置,并且您已经告诉我们您也不能这样做

第三种解决方案非常愚蠢,但在这种非常受限制的情况下(对于不安全的用户)会起作用,就是用一段JavaScript代码替换所有指向被禁止资源的链接,将用户指向文件或404页面。然而,从您的问题来看,您很可能试图阻止来自您无法控制的站点的用户访问,在这种情况下,这也不会起作用


一句话:如果您没有配置web服务器的能力,这不是一个可以解决的问题。

谁告诉您这句话?这显然是错误的,当然,您可以将web服务器配置为包含PHP,而不是直接为文件提供服务。您需要在服务器端执行此操作,文档下载中不涉及客户端javascript。@Bergi您是说将文件放置在
public\u html
之外并通过PHP交付吗?因为我很想这样做,但是我的主机提供商不支持。是的,类似的,但是我很难相信nginx不会支持(除非你的主机对你的支付类别施加了任意限制)@JesseRogers你能更改目录名或移动文件吗?如果是这样的话,让PHP通过
index.PHP?file=myfile.zip
传递这些文件,同时永远不要显示目录。@Bergi我不认为Nginx不支持它,但托管我网站web服务器的公司不允许它。
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";
  }
}