小小网站虽然使用云存储会加快用户的访问速度,但是很多冷门资源内容会产生不必要的成本,例如一些板卡的拆机图片就没必要使用云存储高速访问了,直接在主机上增加硬盘就好。但是停用云存储后,网站原链接自动加图片处理后缀导致用户无法正常访问。

应用场景

访问 http://domain.cn/uploads/1.jpg_sm11,导致不能正确加载图片。
例如又拍云的间隔标识符,这里我选择了以_形式来作为间隔标识符。
需求是访问 http://domain.cn/uploads/1.jpg_sm11 时跳转 http://domain.cn/uploads/1.jpg 以访问正确图片地址。

Nginx 配置文件

将以下配置加入Nginx配置文件中

    location ~* ^/uploads/(.+)\.(\w+)_.+$ {
        # 重定向到去除后缀中的 _ 及其后面的内容的路径
        rewrite ^/uploads/(.+)\.(\w+)_.+$ /uploads/$1.$2 permanent;
    }

这个配置中的 location 块使用正则表达式 ^/uploads/(.+).(\w+)_.+$ 匹配了图片链接,然后通过 rewrite 规则将请求重定向到去除了后缀中的 _ 及其后面的内容的路径,仅保留文件名和格式。配置中的 $1.$2 表示保留文件名和格式,去除 _ 及其后面的内容。

  • location ~* ^/uploads/(.+).(\w+)_.+$:
    这是一个正则表达式,指定了匹配的请求路径。具体解释如下:
  • ~*
    表示后续正则表达式的匹配将会不区分大小写。
  • ^/uploads/
    匹配以/uploads/开头的路径。
  • (.+).(\w+)_.+$:
    使用圆括号捕获两组内容,分别表示文件名前缀((.+))和文件后缀((\w+))。中间的_是要匹配和删除的下划线以及其后的内容。
  • rewrite ^/uploads/(.+).(\w+)_.+$ /uploads/$1.$2 permanent;
    这是一个rewrite指令,用于将匹配的请求重写为新的URL。具体解释如下:
  • ^/uploads/(.+).(\w+)_.+$
    这是一个匹配模式,用于匹配请求路径。
  • /uploads/$1.$2
    这是一个替换模式,用于构造新的URL。$1和$2分别代表匹配模式中括号中捕获的第一组和第二组内容。
  • permanent
    表示执行永久性重定向(HTTP 301)。

Apache 中配置

修改网站首目录下的.htaccess文件来实现类似的重写规则

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # 匹配图片格式,删除后缀中的 _ 及其后面的内容
    RewriteRule ^uploads/(.+)\.(\w+)_.+$ /uploads/$1.$2 [R=301,L]
</IfModule>

效益

假设使用500GB存储容量和月流量20GB的云存储服务一年的费用约为2862元,这还是没被恶意刷量情况下的支出且不排除甲方向客户交付资料时客户反复下载,导致重复流量支出。
根据甲方需求,冷门资源多,大量文档资料pdf类、超清图片、视频资源,将放在本地存储。

注意事项

  • 在进行修改之前,请确保备份了Nginx配置文件,以防发生问题。
  • 上实际情况可能需要根据您的网站结构和文件命名规则进行调整。
  • 301 重定向是永久性重定向,请在测试后再部署到生产环境中。