Nginx 重写:如何在文件扩展后删除所有内容

Nginx rewrite : how to remove everything after extension of a file

我的网站上有很多对图像和文件的不良请求...但名称与真实姓名相近。基本上,如果我有一个名为 example.gif 的文件,就会调用 example.gifzerzer。我想要的是重写以保留名称和扩展名,但后面什么都没有。

我确实创建了一个带有重写的映射文件(它正在工作,例如下面的 tmp.php 到 index.php 重写,除了扩展后删除所有内容的规则)。

这是我到目前为止所做的:

/(.+\.(bmp|gif|ico|jpeg|jpg|png|svg)).+ /;

这也不起作用

/(.+\.(bmp|gif|ico|jpeg|jpg|png|svg)).+? /;

我的地图:

map $request_uri $redirect_uri {
  default "";
  /(.+\.(bmp|gif|ico|jpeg|jpg|png|svg)).+ /;
  /tmp.php /index.php;
}

在迁移到 Nginx 之前,我在 Apache 下,这很有效:

RewriteRule ^([a-z0-9\-/_]*\.(bmp|gif|ico|jpeg|jpg|png|svg)).+ / [R=301,L]

我做了那个重写是有效的,当放在服务器部分时,但它不包含在地图中。

location ~ (.+\.(bmp|gif|ico|jpeg|jpg|png|svg)).+$ {
    return 301 /;
}

如果有人知道为什么,或者可以确认我做对了?