我正在 nginx 中的特定位置返回 pdf 文件。当有人访问 时mysite.com/resume
,我希望resume.pdf
返回我的,但重定向到 url mysite.com/resume.pdf
(以便浏览器显示与 pdf 相关的下载/打印/等按钮)。
下面的内容返回 pdf,因为resume.pdf
位于/dir/to/contents/
,但 位于mysite.com/resume
,而不是mysite.com/resume.pdf
。我如何实现这种重定向?
server {
listen 80;
listen [::]:80;
server_name mysite.com;
root /dir/to/contents;
location / {
index site.html;
}
}
- 编辑:解决第一条评论
答案1
添加.pdf
到/resume
(客户端不可见):
rewrite ^(/resume)$ $1.pdf last;
向浏览器提供正确的文件名是个好主意,例如
location ~* ([^/]*\.pdf)$ {
add_header Content-Disposition 'attachment; filename="$1"';
}
答案2
以下内容应该足够了(我确实测试过了):
rewrite ^/resume$ /resume.pdf last;
正如 @Piotr P. Karwasz 所指出的,MIME 类型检测将由 NGINX 处理。由于重写最终会生成一个.pdf
文件,因此 NGINX 将正确地将其作为 提供application/pdf
。
仅当您希望提示下载文件时才需要@edo1 的额外位,而不是浏览器的默认行为(许多 - 在浏览器中显示)。
答案3
edo1 和 Danila Vershinin 的答案都会返回 pdf,但都是在没有.pdf
结尾的 url 处返回它 - 对于我希望返回带有扩展名的文件的挑剔用例,.pdf
我发现下面的指令可以工作。
server {
...
rewrite ^/resume$ resume.pdf redirect;
...
}
不确定这是否比其他答案提供的性能更差,或者它是否不那么惯用,但它确实满足了我的要求。最后redirect
返回 302。