我有一个用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
只会影响它,对吗?
我尝试在将 pdf 设置为内联的目录中创建一个新的 htaccess。
<FilesMatch ".pdf$"> Header set Content-Disposition "inline" </FilesMatch>
我现在无需下载即可在线查看file.pdf
。但是在域的其余部分,如果我尝试在任何目录中打开pdf,则会按照根htaccess的指示下载pdf。有错吗?
不,这没有错。以这种方式覆盖子目录(更具体).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
是要排除的网址路径前缀。
(尽管您可能希望设置X-Content-Type-Options
标头,而不考虑位置。
但是请注意,这现在基于 URL 路径,而不是文件路径(与使用第二个.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>
如果请求的 URL 路径与规定的正则表达式(即要排除的目录)匹配,则SetEnvIf
指令将设置INLINE_FILE
env var。如果未设置INLINE_FILE
env var(如!
前缀所示),则有条件地设置Content-Disposition
标头。
"我可以....无需下载即可在浏览器中查看吗?
不。HTTPS(取代FTPS)是文本传输,换句话说,所有Web材料都需要从文件服务器作为文本移动到基于浏览屏幕的文字处理器,在那里它被编辑成客户端显示系统。
没有例外,除非您不传输。附件的概念可以内联显示是纯文本和html电子邮件之间区别的回退,但是html在所有情况下都有附件:-
电子邮件的正文中可能包含内联图像以及与之关联的常规附件。
特别是对于带有(在)html文本中的PDF,作为二进制应用程序/pdf的PDF附件需要独立于网页运行,作为客户端CPU中的二进制对象,以编辑成可选的框架嵌入式屏幕像素对象,同时生成可编辑的文本,用于搜索/显示字母作为单词组。