我从网上收集的一些想法中编写了一个"解决方案"来重定向所有pdf,例如,在服务器上下载到reCAPTCHA表单,并在通过后下载所请求的文件。这是cms不可知论和工作,但我有一个情况下载一个不正确的文件。
代码在:https://github.com/Siot/docafi (request.php file)
我解释这个过程:
-
所有.pdf请求通过.htaccess重定向到request.php:
RewriteRule ^(.+.pdf)$ request.php?file=$1 [NC,L]
-
如果这是第一次($_SESSION var) request.php将显示一个reCAPTCHA表单。
- 如果reCAPTCHA通过->下载开始。
- If error ->错误信息
-
如果之前在同一会话中通过了reCAPTCHA,则自动开始下载
特殊情况是第一次在会话中使用右键单击链接开始下载。
它下载了一个不正确的文件内容,因为我不能显示reCAPTCHA表单。我可以知道如果用户在没有javascript的链接上右键单击?我想要一个透明的解决方案在不同的cms/html文件在服务器上。
我可以用另一种方法解决这个问题吗?
不,选择'Save as…'在弹出式菜单中工作完全像它应该的那样-它保存任何通过链接获取到本地磁盘,而不是试图在浏览器中显示它。这是完全正确的,它正在下载HTML文件与reCAPTCHA代替,没有办法检测它,甚至没有与 Javascript的对服务器来说,这都是一样的,因为浏览器发出相同的请求,它只是处理结果不同。你可以在onContextMenu
事件上设置一个标志,但如果你然后通过左键点击它或手动在地址栏中粘贴地址来打开链接,那么它就会有错误的设置。
这应该是可能的javascript,但PHP我相当有信心,将没有办法这可以做到考虑到它是服务器端。
查看之前的一些堆栈溢出问题,如:
如何获得右键点击事件javascript