好的 – 我一直在使用这个规则
location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) { alias /usr/local/image/$1; error_page 404 /handler.php; }
如果图像文件存在,则将其提供 – 如果该文件不存在,则会自定义一个名为/handler.php的404 error_page用于传递商品。 如果图像不变,则会返回一个304 – 新的图像返回一个200.几乎完美。
问题是,返回一个404与图像是不是正确的事情 – 我应该接受请求,确定文件是否存在,如果不运行处理程序,并返回图像 – 而不是显示404。
我试图用try_filesreplaceerror_page,但没有得到所需的结果:
location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) { alias /usr/local/image/$1; try_files $uri $uri/ /handler.php; }
在try_files中似乎没有任何匹配,所以所有的请求都通过handler.php。 我明白,别名是一种特殊的匹配模式,但如果我尝试进入
try_files "" /handler.php;
哪个工作,但“”返回不正确的内容types(内容types:·应用程序/八位字节stream),而handler.php返回正确的(内容types:·图像/ jpeg)
当然,我可以添加“default_type image / jpeg;” 强制默认,但我运行的风险,返回一个JPEG格式的内容types时,实际图像可能是GIF或PNG。
我正在运行Debian 6 – nginx-1.0.6-1〜dotdeb.2
任何想法如何使这项工作?
首先,您可以强制Nginx在使用error_page时从脚本中返回状态码:
location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) { alias /usr/local/image/$1; error_page 404 = /handler.php; }
等号告诉Nginx从handler.php而不是404返回状态码。
从try_files ,试试这个configuration:
location ~* /(?:abc12345|12abcdef)/(.*\.(jpe?g|gif|png)) { root /usr/local/image; try_files /$1 /handler.php; }