嗨我是试图重定向所有链接到任何的pdf文件在我的网站的页面形式的,收集用户的信息之前,他们就可以继续下载/视图的pdf。

例如:

我要重新定向*.pdf格式的文件在网站的请求。php?文件=name_of_pdf_being_redirected

哪里request.php 是的页面形式对它要求的几个细节之前进行。

所有pdf在该网站是举行内部/pdf文件夹。

任何想法?

编辑:对不起,我使用Apache在服务器上。

OK我得到的有:我有工作,现在使用:

在上 RewriteRule^pdf/(.+.pdf)$请求。php?文件=/$1[R]

但是现在,当它关系到下载网页时,我想让我们的人实际上下载的文件是我的新规则随地吐痰下载链接回的形式:-P哈哈,因此是无论如何,让它下载的文件一旦形式已经提交和你在download.php?

有帮助吗?

解决方案

你可以试试这个:

  • 移动你的文件的一个文件夹"外部"web root所以没有一个能够访问它通过浏览器
  • 使用会议来检测一个人是否已经完成形式或者不
  • 使用php电文件下载脚本。在其naivest形式,它可能看起来是这样的:
    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

这是一个试验和测试技术的使用的网站上。代码的例子是概要草案和需要改进。

其他提示

想法?你可以先告诉我们这web/应用程序服务器使用的是,可能有助于:-)

在阿帕奇,你应该能够使用一个RewriteRule改变请求到不同的形式。例如,转 /pub/docs/x.pdfrequest.php?file=/pub/docs/x.pdf 可以做的东西,如:

RewriteRule ^/pdf/(.*)\.pdf/  request.php?file=/$1.pdf

记住这从存储器(六年,因为我碰了Apache和仍然清洁:-),格式可以略有不同。

更新:

现在你就是我的排序,这里的几个选择你的下一个问题。

1/重新命名的Pdf文件,以有不同的扩展,所以,他们没有抓住的重写规则。他们应该构成以推动同一类型的客户,以便他们打开的客户的选择的观察者。

2/做载的一部分脚本,而不是作为一个直接进入PDF。自提交形式是一个HTTP请求,则应该能够回答它立即PDF内容,而不是重新引导他们 再一次 以下载的网页。

第二个选择是我的选择,因为它:

  • 停止人们搞清楚,他们可以得到的Pdf文件,只是通过请求xx。pdfx而不是xx。pdf。
  • 使得它更快的人获得PDF(他们没有点击链接再)。

请注意,我的回答是对于.NET网站,但我敢肯定,在PHP中的某处存在相同的结构。

我将有一个HttpModule用的* .pdf的路径,简单地做了的Response.Redirect到request.php?......等等(在我的情况request.aspx),然后在该按钮的事件处理程序点击该网页,当你知道要显示的PDF,他们已获得授权,简单做一个Response.ContentType = [MIME类型的PDF],然后Response.WriteFile(pdfFile),最后到Response.End()。

有其他的东西可以添加,使其更好,如文件大小等,但在最小的情况下,这会工作。如果你想在C#中它的代码我能想出在约3分钟的东西,但在PHP我很迷失。我开始出去找的HttpModules以及如何将它们写在PHP。

谷歌搜索“PHP HTTP模块”导致此:ASP.NET的等效在的HttpModules PHP 所以,我可能是有点不对,但我希望这是一个起点。

如果您使用的是Apache Web服务器使用.htaccess文件。你需要请确保您已经启用了mod_rewrite,但一旦你做,你可以使用这两个简单的线条重写所有文件:

RewriteEngine叙述在 重写规则^ .PDF $ /rewrite.php [NC,L]

如果您使用的是IIS,你可以使用的ISAPI_Rewrite完成类似的东西。

您另一种方法是把你的PDF的目录中不能公开访问,然后对PDF资源提出的任何请求将返回访问被拒绝的错误,文件只能通过相应的下载脚本访问的内部。

if($user==authenticated){
 //set pdf headers
 echo file_get_contents('actual.pdf');

无MOD重新写入,隐藏实际源是什么,我通常做的 - 希望这有助于

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top