Nginx $upstream_http_content_type 正则问题

新手上路,请多包涵

我通过 nginx 的 $upstream_http_content_type 判断类型是否是图片,代码如下:

add_header X-Content-Type $upstream_http_content_type;

if ($upstream_http_content_type ~* ^image/(jpg|jpeg|pjpeg|png|x-png|gif|bmp|x-icon|webp|svg\+xml)) {
    return 301;
}

可结果是 X-Content-Type 倒是有了,却没有 301 跳转?

67f51f75gw1esjz1788c9j20fg07bq3o.jpg

理论上应该酱紫啊:

67f51f75gw1esjz4whqutj20cr04z0t1.jpg

求解,如何弄?

阅读 7.5k
2 个回答

没细看哈 如果真是正则的问题 那就是你image后的斜线没有转义^image\/(jpg|jpeg|pjpeg|png|x-png|gif|bmp|x-icon|webp|svg\+xml)

新手上路,请多包涵

这里的原因是,在请求传递到后端之前,if就已经判断了,所以$upstream_http_content_type是没有值的,这里可以使用一个map来有根据响应头的值有条件的执行操作:

map $upstream_http_content_type $sts{
     default 200;
     ~* ^image\/(jpg|jpeg|pjpeg|png|x-png|gif|bmp|x-icon|webp|svg\+xml) 301;
}

根据需求自行修改map,仅提供思路,未作该需求的验证

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题