You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx下如何重写WordPress上传目录中无扩展名/仅带点结尾的图片URL?

Nginx下如何重写WordPress上传目录中无扩展名/仅带点结尾的图片URL?

老哥,我太懂你这种糟心处境了——上传目录乱成一锅粥,改数据库和批量加扩展名又怕搞出幺蛾子,用Nginx重写确实是最稳妥的快速解决方案。我给你一套针对性的配置,分两步搞定末尾带点和无扩展名的图片请求,让浏览器乖乖显示图片而不是弹下载框,还能顺便解决缓存问题:

第一步:先统一清理末尾带点的URL

首先处理那些末尾挂着.的奇葩请求,把多余的点去掉,这样后面就能统一处理无扩展名的情况了。在你的Nginx配置的server块里加上这段规则:

# 去掉上传目录中URL末尾的点
rewrite ^(/wp-content/uploads/2024/[^/.]+)\.$ $1 permanent;

这段会把/wp-content/uploads/2024/image.这类请求永久重定向到/wp-content/uploads/2024/image,既统一了请求格式,还不会影响SEO(永久重定向是会传递权重的)。

第二步:处理无扩展名的图片请求,让浏览器识别为图片

接下来针对无扩展名的请求,我们要让Nginx找到对应的文件,同时强制告诉浏览器“这是图片,别下载”,顺便开启缓存优化。在刚才的规则下面补上这段配置:

location ^~ /wp-content/uploads/2024/ {
    # 先处理正常带扩展名的图片请求
    try_files $uri $uri/ @handle_no_ext_images;
    # 开启图片长期缓存,解决缓存缺失问题,对SEO更友好
    expires 30d;
    add_header Cache-Control "public, immutable";
}

location @handle_no_ext_images {
    # 先尝试按JPEG格式返回(如果你的图片大多是JPG,可调整顺序)
    if (-f $request_filename) {
        default_type image/jpeg;
        break;
    }
    # 再尝试PNG格式
    if (-f $request_filename) {
        default_type image/png;
        break;
    }
    # 最后尝试WebP格式
    if (-f $request_filename) {
        default_type image/webp;
        break;
    }
    # 理论上你说目录里只有图片,这步大概率用不上
    return 404;
}

额外说明

  • 配置改完后记得重启Nginx生效:sudo systemctl restart nginx
  • 如果你的图片还有GIF这类格式,直接在@handle_no_ext_images里再加一段default_type image/gif;的判断就行
  • 你说目录里只有图片,所以上面的规则完全够用,不用额外加复杂的文件类型检测——要是真担心误匹配,其实也可以再加文件头判断,但完全没必要多此一举

备注:内容来源于stack exchange,提问作者Johnny Bravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:38:02