将Apache服务器上的所有.PDF请求重定向(重写?)到.php文件
因此,我正在构建一个应用程序,它需要将web服务器(Apache)上给定目录中的.pdf文件的所有请求重定向(或者重写?我需要在客户端执行URL保持不变的操作)到.php文件。但是,我只希望在用户试图在浏览器中显示PDF(而不是下载)时重写此请求。我觉得第二部分是不可能的 是否有人有一些好的资源来研究,这些资源不仅描述了我需要使用的语法,而且还描述了Apache服务器的幕后情况 另外,有人知道我如何确定文件是直接下载还是通过web浏览器请求的吗?我有一种感觉,因为当你通过浏览器访问PDF文件时,它似乎是下载并使用Adobe Reader插件显示的,所以两者之间没有区别 致以最诚挚的问候,将Apache服务器上的所有.PDF请求重定向(重写?)到.php文件,php,apache,pdf,mod-rewrite,redirect,Php,Apache,Pdf,Mod Rewrite,Redirect,因此,我正在构建一个应用程序,它需要将web服务器(Apache)上给定目录中的.pdf文件的所有请求重定向(或者重写?我需要在客户端执行URL保持不变的操作)到.php文件。但是,我只希望在用户试图在浏览器中显示PDF(而不是下载)时重写此请求。我觉得第二部分是不可能的 是否有人有一些好的资源来研究,这些资源不仅描述了我需要使用的语法,而且还描述了Apache服务器的幕后情况 另外,有人知道我如何确定文件是直接下载还是通过web浏览器请求的吗?我有一种感觉,因为当你通过浏览器访问PDF文件时,
<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>
选项+FollowSymLinks
选项+索引
重新启动发动机
#仅当不存在实际文件时
重写cond%{REQUEST_FILENAME}-F
#仅当不存在实际目录时
重写cond%{REQUEST_FILENAME}-D
重写规则/your directory/path/(.+)\.pdf$1.php[NC,L]
一,。这是重写
二,。查看和下载之间没有区别。如果Apache服务器收到请求,它将给出响应。响应将是PHP脚本将输出的任何内容。更新:@corretge已经给了你一个与此相关的答案。我认为依赖客户端发送的头并不完全可靠,但您可以尝试这种解决方案
三,。在这里,您可以了解未测试的,但也可以尝试:
RewriteRule ^(.+)\.pdf$ /downloadPdf.php?pdf=$1.pdf [L,NC,QSA]
在/downloadPdf.php脚本中,查询带有标题的HTTP标题。\u list(),如果存在这些标题中的任何一个:
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']));
您需要管理其他标题,如内容类型和内容长度
阅读关于从PHP发送文件的PHP手册。如果OP准确复制您的代码,他将出现服务器错误。注释不能在行的中间开始。如果第一个非空白字符是
#
,则整行将被视为注释。在所有其他情况下,它将被视为指令的一部分:@LazyOne:谢谢!将它们放在那里进行解释,但忘记告诉OP删除它们。感谢您的输入。虽然这里的信息绝对有用,但另一个答案更直接地回答了我的问题。别担心,但我很好奇:如果PDF是强制下载的,或者如果在浏览器中显示,您会收到不同的标题?我还没有测试确认,但根据上面的回答,标题略有不同。我会做一些网络嗅探,并在这里发布答案。