我有公共资源文件夹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
。