如何将所有文件夹请求重定向到 nginx 中的数据源?

如何将所有文件夹请求重定向到 nginx 中的数据源?

我有公共资源文件夹images,并且reveal.js我试图将服务器上包含这些文件夹名称的 URL 重定向到同一源。例如:

/images/1.gif --> /path/to/images/1.gif
/some/other/url/images/1.gif --> /path/to/images/1.gif

类似reveal.js

/reveal.js/path/to/element.js --> /path/to/reveal.js/path/to/element.js
/some/other/url/reveal.js/element.js --> /path/to/reveal.js/element.js

如何使用 Nginx 来实现这一点?


server {
    location / {
        root /data/www;
    }

    location ~* "^.+\/images\/" {
        root /data/images; 
    }
}

这是我的配置文件。请求到site.com/images/image.gif和 site.com/some/other/url/images/image.gif should all point to the file/data/images/image.gif`

答案1

这是一个相当简单的重定向,并包含在Nginx 重定向文档类似这样的操作应该可以工作,并且你可以改变正则表达式直到它满足你的需要 - 例如添加特定的文件类型。

location ~* "^\/(resources|images)\/(.*)" {
  return 301 https://www.example.com$request_uri;
}

根据以下评论进行更新。您需要使用 Firefox 和 Live HTTP Headers 插件之类的工具来检查标头,以查看正在使用的位置 - 您需要编译标头模块,有关该模块的信息这里

location ~* "^\/(resources|images)\/(.*)" {
  root /var/www/this/folder;
  add_header Z_LOCATION "LOCATION NAME";
}

答案2

您在这里需要使用的是alias指令,但是当您使用alias正则表达式时,您需要将捕获的文件中 pip 放入别名中,如下所示:

location ~* "^.+/images/(.+)$" {
    alias /data/images/$1;
}

reveal.js对于 ,也可以执行相同的操作images

相关内容