.htaccess htaccess为PDF文件有条件地设置Content-Disposition标题

m3eecexj  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(129)

我有一个用PHP和JavaScript制作的脚本,它通过API生成PDF。
域中有一个.htaccess,表示PDF将被“下载”。

<FilesMatch "\.pdf$">
      Header set Content-Disposition "Attachment"
      Header set X-Content-Type-Options "nosniff"
  </FilesMatch>

我能否以某种方式保留域配置并排除生成的PDF文件,以便使用浏览器的内置PDF查看器查看该文件,而不是浏览器提示下载/保存文件?
如果我在写入PDF的目录中生成一个新的.htaccess文件,.htaccess只会影响它,对吗?

wribegjk

wribegjk1#

我试着在目录中创建一个新的htaccess,在那里我把pdf文件设置为inline. <FilesMatch "\.pdf$"> Header set Content-Disposition "inline" </FilesMatch>,我现在可以在线查看file.pdf而不用下载它.但是在域的其他地方,如果我试着在任何目录中打开pdf文件,都会按照根目录htaccess的指示下载.这是错的吗?
不,这是正确的。以这种方式覆盖子目录(更具体的).htaccess文件中的头文件是完全可以接受的。(* 旁白:* 您可能会使用unset头文件来代替,因为inline是省略时的默认值。)
另一种方法是根据URL路径在父配置中有条件地设置标头。

有条件地设置标题

例如,当URL路径与正则表达式^/directory($|/) * 不 * 匹配时(需要Apache 2.4):

# /.htaccess

<If "%{REQUEST_URI} !~ m#^/directory($|/)#">
    <FilesMatch "\.pdf$">
        Header set Content-Disposition "Attachment"
        Header set X-Content-Type-Options "nosniff"
    </FilesMatch>
</If>

其中/directory是要排除的URL路径 * 前缀 *。
(尽管您可能希望设置X-Content-Type-Options标头而不考虑位置。)
但是,请注意,如果URL路径和file-path不相同,则现在是基于URL路径,而不是file-path(与使用第二个.htaccess文件时一样)。

使用mod_setenvif的替代方法(Apache 2.2+):

SetEnvIf Request_URI "^/directory($|/)" INLINE_FILE
<FilesMatch "\.pdf$">
    Header set Content-Disposition "Attachment" env=!INLINE_FILE
    Header set X-Content-Type-Options "nosniff"
</FilesMatch>

SetEnvIf指令设置INLINE_FILE env var,如果URL路径与指定的正则表达式(即要排除的目录)匹配。如果INLINE_FILE env var * 未 * 设置(如!前缀所示),则有条件地设置Content-Disposition头。

5rgfhyps

5rgfhyps2#

“我可以......可以在浏览器中查看而不下载吗?”
不。HTTPS(取代FTPS)是文本传输,换句话说,所有的网络材料都需要作为文本从文件服务器部署到基于浏览屏幕的文字处理器,在那里它被编辑到客户端的显示系统中。
没有例外,除非你不发送。附件的概念可以显示内联是一个倒退到纯文本和html电子邮件之间的差异,html有附件在所有情况下,但是:-
电子邮件消息可以在其正文内包含内嵌图像以及与之相关联的常规附件。
特别是对于具有(在)html文本的PDF,作为二进制应用程序/pdf的PDF附件需要独立于网页作为二进制对象在客户端CPU中运行,以被编辑成可选帧嵌入屏幕像素对象,并且同时产生用于搜索/显示作为词组的字母的可编辑文本。

相关问题