0

我正在根据通过网络收集的一些想法编写一个“解决方案”来重定向所有 pdf,例如,在服务器上下载到 reCAPTCHA 表单,并在通过后下载请求的文件。它与 cms 无关并且可以工作,但我有一种情况是下载了不正确的文件。

代码位于:https ://github.com/Siot/docafi (request.php 文件)

我解释一下过程:

  • 所有通过 .htaccess 重定向到 request.php 的 .pdf 请求:

    RewriteRule ^(.+.pdf)$ request.php?file=$1 [NC,L]
    
  • 如果是第一次 ($_SESSION var) request.php 将显示一个 reCAPTCHA 表单。

    • 如果 reCAPTCHA 通过 -> 下载开始。
    • 如果错误 -> 错误消息。
  • 如果之前在同一会话中通过了 reCAPTCHA,则下载会自动开始。

特殊情况是会话中第一次但使用右键单击链接开始下载的时间。

它下载了不正确的文件内容,因为我无法显示 reCAPTCHA 表单。我可以知道用户是否在没有 javascript 的情况下右键单击了链接吗?我想要一个对服务器上不同 cms/html 文件的透明解决方案。

我可以用另一种方式解决这个问题吗?

4

2 回答 2

2

使用 javascript 应该是可能的,但是 PHP 我相当有信心考虑到它是服务器端,这是不可能做到的。

查看以前的一些堆栈溢出问题,例如:

如何获取右键单击事件javascript

于 2013-05-22T21:27:59.787 回答
2

不,在弹出菜单中选择“另存为...”完全可以正常工作 - 它会将链接获取的任何内容保存到本地磁盘,而不是尝试在浏览器中显示它。因此,它使用 reCAPTCHA 下载 HTML 文件是完全正确的,即使使用Javascript也无法检测到它- 对于服务器来说都是一样的,因为浏览器发出相同的请求,它只是以不同的方式处理结果. 您可以在事件上设置一个标志onContextMenu,但如果您随后通过左键单击该链接或手动将地址粘贴到地址栏中来打开该链接,则无论如何它的设置都是错误的。

于 2013-05-22T21:23:39.937 回答