如果用户尝试仅在浏览器中直接访问图像文件,我该如何重定向?我想保留嵌入图像的能力<img src="...">
。如何从重定向
https://img.example.com/c/600x1200_90_webp/img-master/img/2022/01/03/08/04/54/95259215_p0_master1200.jpg
至
https://example.com/detail?id=95259215
这是我的 nginx 配置文件
location ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(?<filename>.+\.(jpg|png|webp))$" {
return 301 https://example.com/detail?id=$filename;
}
代码不起作用,因为它会起作用,https://example.com/detail?id=95259215_p0_master1200.jpg
但我需要它在文件名的最后一位数字之后修剪字符串,所以在这种情况下 trim off _p0_master1200.jpg
。如果用户通过浏览器访问它,我也不知道如何制作它。
您的正则表达式
(?<filename>.+\.(jpg|png|webp))$
将整个文件名捕获到文件名变量。要仅提取_
变量之前的部分,请改用以下内容:这个只匹配
filename
变量的数字(我会称之为image_id
更具描述性)。https://regexr.com是处理正则表达式的好工具。为了限制只显示给浏览器,你需要使用nginx http referer 模块。
这两者结合起来,配置看起来像:
nginx 将检查 HTTP Referer 值。如果它包含在
server_name
字段中指定的名称,它将发送重定向。referer 字段由浏览器在加载网页资源时设置。