您好我正在尝试将我网站上任何pdf文件的所有链接重定向到一个页面,其中包含一个表单,用于收集用户信息,然后才能继续下载/查看pdf。
例如
我想将网站中的* .pdf文件重定向到request.php?file = name_of_pdf_being_redirected
其中request.php是包含表单的页面,在继续之前要求提供一些细节。
网站中的所有pdf都保存在/ pdf文件夹中。
有什么想法吗?
编辑:抱歉,我在服务器上使用Apache。好的,我正在那里: 我现在正在使用它:
RewriteEngine on RewriteRule ^ pdf /(.+。pdf)$ request.php?file = / $ 1 [R]
但现在当它进入下载页面时我想让这个人实际下载文件我的新规则是将下载链接吐回到表单:-P哈哈所以无论如何都要让它下载文件一次表格已经提交,你在download.php?
答案 0 :(得分:1)
想法?您可以先告诉我们您正在使用哪个网络/应用服务器,这可能有所帮助: - )
在Apache中,您应该能够使用RewriteRule将请求转换为其他形式。例如,将/pub/docs/x.pdf
转换为request.php?file=/pub/docs/x.pdf
可以通过以下方式完成:
RewriteRule ^/pdf/(.*)\.pdf/ request.php?file=/$1.pdf
请记住这是来自内存(自从我触及Apache并且仍然干净了六年之后:-),格式可能略有不同。
<强>更新强>
现在你已经对它进行了排序,这里有几个选项可以解决你的下一个问题。
1 /重命名PDF以具有不同的扩展名,以便它们不会被重写规则捕获。应将它们配置为将相同的MIME类型推送到客户端,以便它们在客户端选择的查看器中打开。
2 /也可以将下载作为脚本的一部分,而不是直接访问PDF。由于提交表单是HTTP请求,您应该能够立即使用PDF内容回复它,而不是将它们再次重定向到下载页面。
第二种选择是我的选择,因为它:
答案 1 :(得分:0)
请注意,我的答案是针对.NET网站的,但我确信PHP中存在相同的构造。
我会有一个带有* .pdf路径的HTTPModule,只需要一个Response.Redirect到request.php?...等等(在我的情况下是request.aspx)然后在按钮的事件处理程序中点击那个页面,当你知道要显示哪个pdf并且他们被授权时,简单做一个Response.ContentType = [MIME类型为pdf],然后是Response.WriteFile(pdfFile),最后是Response.End()。
您还可以添加其他内容以使其更好,例如文件大小等。但在最小的情况下,这将起作用。如果你想在C#中使用它的代码我可以在大约3分钟内得到一些东西,但在PHP中我很丢失。我开始寻找HTTPModules以及如何用PHP编写它们。
谷歌搜索“PHP HTTPModule”导致这个:Equivalent of ASP.NET HttpModules in PHP所以,我可能有点不对劲,但希望这是一个起点。
答案 2 :(得分:0)
如果您使用的是Apache Web服务器,请使用.htaccess文件。你需要确定你已经启用了mod_rewrite,但是一旦你这样做,你可以使用这两个简单的行重写所有文件:
RewriteEngine On RewriteRule ^ .pdf $ /rewrite.php [NC,L]
如果您使用的是IIS,则可以使用ISAPI_Rewrite完成类似的操作。
您的另一种选择是将您的pdf放在不可公开访问的目录中,然后对pdf资源发出的任何请求都将返回拒绝访问错误,并且只能通过相应的下载脚本访问这些文件。
答案 3 :(得分:0)
你可以试试这个:
if ( isset( $_SESSION[ 'OK_TO_DOWNLOAD' ] ) == false ) { header( "Location: must_fill_this_first.php" ); exit( 0 ); } header( "Content-type: application/pdf" ); // double check the above, google it as i am not sure echo file_get_contents( 'some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ] ); // ideally a binary-safe function needs to be used above
这是我在网站上使用的久经考验的技术。代码示例是草案大纲,需要改进。
答案 4 :(得分:0)
if($user==authenticated){
//set pdf headers
echo file_get_contents('actual.pdf');
没有mod重写,隐藏实际来源并且是我通常做的 - 希望这有帮助