小编jim*_*img的帖子

Nginx try_files 问题

好的 - 我一直在使用这个规则一段时间

location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) {
    alias /usr/local/image/$1;
    error_page 404 /handler.php;
}
Run Code Online (Sandbox Code Playgroud)

如果图像文件存在,则提供它 - 如果文件不存在,一个名为 /handler.php 的自定义 404 error_page 用于交付货物。如果图像没有改变,它将返回 304 - 新图像返回 200。几乎完美。

问题是,返回带有图像的 404 不是正确的做法——我应该接受请求,确定文件是否存在,如果不运行处理程序并返回图像——而不是显示 404。

我试图用 try_files 替换 error_page,但没有得到想要的结果:

 location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) {
     alias /usr/local/image/$1;
     try_files $uri $uri/ /handler.php;
 }
Run Code Online (Sandbox Code Playgroud)

try_files 中似乎没有任何匹配项,因此所有请求都通过 handler.php。我知道别名是一种特殊的匹配模式,但是如果我尝试输入

try_files "" /handler.php;
Run Code Online (Sandbox Code Playgroud)

哪个有效,但是 "" 返回不正确的内容类型 (Content-Type:·application/octet-stream) 而 handler.php 返回正确的内容类型 (Content-Type:·image/jpeg)

当然,我可以添加“default_type image/jpeg;” 强制默认,但当实际图像可能是 gif 或 png 时,我冒着返回 jpeg 内容类型的风险。

我正在运行 debian 6 - nginx-1.0.6-1~dotdeb.2

关于如何使这项工作的任何想法?

nginx alias

1
推荐指数
1
解决办法
3758
查看次数

标签 统计

alias ×1

nginx ×1