【问题标题】:Redirect (rewrite?) all .PDF requests on Apache server to .php file将 Apache 服务器上的所有 .PDF 请求重定向(重写?)到 .php 文件
【发布时间】:2011-10-07 19:01:31
【问题描述】:

因此,我正在构建一个应用程序,该应用程序需要重定向(或重写?我需要在客户端执行 URL 保持不变的那个)到 .php 文件,以处理 .pdf 文件中发生的所有请求我的 Web 服务器 (Apache) 上的给定目录。但是,我只希望在用户尝试在浏览器中显示 PDF(而不是下载)时重写此请求。我觉得这第二部分是不可能的。

是否有人有一些很好的资源可供研究,这些资源不仅描述了我需要使用的语法,还描述了 Apache 服务器的幕后情况?

另外,有没有人知道我如何确定文件是直接下载还是通过网络浏览器请求?我有一种感觉,因为当您通过浏览器访问 PDF 文件时,它似乎是使用 Adob​​e Reader 插件下载并显示它,因此两者之间没有区别。

最好的问候,

【问题讨论】:

    标签: php apache pdf mod-rewrite redirect


    【解决方案1】:
    <IfModule mod_rewrite.c>
       Options +FollowSymLinks
       Options +Indexes
       RewriteEngine On
    
       # only if not an actual file exist
       RewriteCond %{REQUEST_FILENAME} !-f
    
       # only if not an actual directory exist
       RewriteCond %{REQUEST_FILENAME} !-d
    
       RewriteRule /your-directory/path/(.+)\.pdf $1.php [NC,L]
    </IfModule>
    

    1。正在重写。

    2。查看和下载没有区别。如果您的 Apache 服务器收到请求,它将给出响应。响应将是您的 PHP 脚本将输出的任何内容。更新:@corretge 给了你一个与此相关的答案。我认为依赖客户端发送的标头并不完全可靠,但是您可以尝试该解决方案。

    3。在这里你可以了解Apache's mode_rewrite

    【讨论】:

    • 如果 OP 完全复制你的代码,他会出现服务器错误。注释不能从行中间开始。如果 first 非空白字符是 #,则整行被视为注释。在所有其他情况下,它将被视为指令的一部分:httpd.apache.org/docs/current/configuring.html#syntax
    • @LazyOne:谢谢!将它们放在那里进行解释,但忘记告诉 OP 删除它们。
    【解决方案2】:

    未测试,但您也可以尝试:

    RewriteRule ^(.+)\.pdf$  /downloadPdf.php?pdf=$1.pdf [L,NC,QSA]
    

    如果存在任何这些,则在 /downloadPdf.php 脚本中使用 headers_list() 查询 HTTP 标头:

    header("Content-Type: application/force-download");
    header("Content-Type: application/download");
    

    如果存在下载标头,请发送文件

      header("Content-Disposition: attachment; filename=\"" . stripslashes($this->ubqDoc[$this->camp]['name']) . "\"");
    

    还有强制下载标头。

    否则,发送带有此标头的文件

      header("Content-Disposition: inline; filename=" . stripslashes($this->ubqDoc[$this->camp]['name']));
    

    您需要管理其他标头,例如 Content-Type 和 Content-Lenght

    阅读fpassthru PHP 手册,了解从 PHP 发送文件。

    【讨论】:

    • 感谢您的意见。虽然这里的信息绝对有用,但另一个答案更直接地回答了我的问题。
    • 别担心,但我很好奇:如果 PDF 是强制下载或显示在浏览器中,您会收到不同的标题?
    • 我尚未测试确认,但根据上述响应,标题略有不同。我会做一些网络嗅探并在这里发布答案。
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多