我拥有一个网站,其中包含许多可供下载的免费软件。我面临的问题是来自世界各地的人们正在获取文件的直接链接(例如 .zip 文件)并将它们发布在他们的网站和一般论坛上。我得到了大量的带宽,这没关系,但是访问的页面数量很少。有没有一种方法或脚本可以添加到链接中,这样当有人按下来自外国网站的链接时,会打开我网站的页面,然后让他下载文件,以便我获得更多访问。
例如,这是我网站上的地址:
当任何人按下它时,它将直接开始下载过程。
我拥有一个网站,其中包含许多可供下载的免费软件。我面临的问题是来自世界各地的人们正在获取文件的直接链接(例如 .zip 文件)并将它们发布在他们的网站和一般论坛上。我得到了大量的带宽,这没关系,但是访问的页面数量很少。有没有一种方法或脚本可以添加到链接中,这样当有人按下来自外国网站的链接时,会打开我网站的页面,然后让他下载文件,以便我获得更多访问。
例如,这是我网站上的地址:
当任何人按下它时,它将直接开始下载过程。
您的站点由 Apache Web 服务器托管,因此您应该能够在站点的 httpd.conf(或虚拟主机块)中执行以下操作
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/ [NC]
RewriteRule ^/PublicFiles/ /page-about-direct-links.html
这基本上是在说:
关于 mod_rewrite 的更多信息可以在这里找到:mod_rewrite - Apache HTTP Server
如果您使用的是 PHP,您可以拥有一个将用户链接到下载的脚本,但前提是该脚本$_SERVER['HTTP_REFERER']
来自您的站点。如果不是,您将重定向到您的网站。
为什么不只是使链接动态和间接,例如:
第 X 页:(静态)
<a href="Y">SuperNeat Program</a>
在 Y 页上:(动态生成)
Click here to download
<a href="Z.php?timestamp={timestamp}&counter={counter}&hash={hash}">
SuperNeat Program</a>
并将时间戳替换为自 1970 年以来以毫秒为单位的当前时间,计数器 = 每次下载时递增一次的计数器,哈希 = 连接的 MD5 哈希(时间戳,计数器,秘密盐)其中秘密盐 = 您保密的任何喜欢的代码。
然后在 Z.php 页面上,您只需从查询字符串中的计数器和时间戳重新计算哈希,检查它是否与查询字符串中的哈希匹配,并且时间戳是最近的(例如,从前 30 分钟或 60 分钟或任何)。如果是,则提供有问题的文件。如果不是,则抛出错误消息。这使某人只有很短的时间可以直接链接到您的文件。如果您甚至不想这样做,那么请跟踪 Z.php 查询字符串中收到的计数器值,并且不要多次接受它们。
我根本不是网络专家,但我在考虑以下指针 -
如果您使用的是 asp.net,可以 http 处理程序或在网站级别配置的模块提供帮助(有关网络上的大量信息,我最近查找了一些工作,例如,这里有一篇文章。
这个想法是在请求到达目标文件之前拦截请求并将其重定向到您希望显示的页面;例如 - 如果有人希望浏览到您发布的网址(“ http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip ”)拦截此调用,请使用一些查找来查找您的页面希望在那里显示和重定向请求;我猜跟随链接的用户不会太恼火(除非他们已经完成“将目标另存为”,这将导致他们保存一些 HTML 而不是 ZIP)。
但是,我的计划中存在一些“漏洞”——您如何实际提供可在您自己的页面上使用的链接?我相信您可以区分来自您网站的请求和来自其他网站的请求,您可以通过检查请求对象来检查处理程序/模块。