NGINX 针对不同文件夹上的特定上传文件
NGINX target specific upload files on different folders
我需要为多个特定的上传文件添加一个noindex
标签,但它们都属于不同的年月上传文件夹,例如:
/var/www/public/app/uploads/2021/06/file-1.pdf
/var/www/public/app/uploads/2018/11/file-2.pdf
/var/www/public/app/uploads/2011/07/file-3.pdf
我最初是这样做的,但没有成功:
location ~ "^(.*)/app/uploads/(.*)$" {
location ~ ^/(file-1.pdf|file-2.pdf|file-3.pdf)$ {
add_header X-Robots-Tag "noindex";
}
}
我还没有访问权限来测试,但这是我打算做的:
location ~ "/var/www/public/app/uploads/(.*)$" {
location ~ ^/(file-1.pdf|file-2.pdf|file-3.pdf)$ {
add_header X-Robots-Tag "noindex";
}
}
我想知道是否有更好的方法,或者这是否有效。现在有 27 个特定文件我必须这样做,所以我不确定 file-1.pdf|file-2.pdf|file-3.pdf
是否是我的最佳选择。
感谢任何帮助,谢谢。
首先,你肯定是错误地使用了location
指令。假设您的服务器根目录是 /var/www/public/app
并且您的示例请求是 http://example.com/uploads/2021/06/file-1.pdf
规范化 URI(需要检查 location
或 rewrite
指令)将是 /uploads/2021/06/file-1.pdf
。将捕获这些请求并添加所需 header 的位置示例是
location ~ ^/uploads/(?<file>.*) {
if ($file ~ ^(?:2021/06/file-1\.pdf|2018/11/file-2\.pdf|2011/07/file-3\.pdf))$ {
add_header X-Robots-Tag "noindex";
}
}
这里的(?<file>.*)
是so-callednamed capture group以备后用。也可以使用两个嵌套位置:
location /uploads/ {
location ~ /(?:2021/06/file-1\.pdf|2018/11/file-2\.pdf|2011/07/file-3\.pdf)$ {
add_header X-Robots-Tag "noindex";
}
}
您也可以使用 map
指令(虽然我不知道这是否可以称为“更好的方法”):
map $file $robots {
2021/06/file-1.pdf noindex;
2018/11/file-2.pdf noindex;
2011/07/file-3.pdf noindex;
# default value will be an empty string
}
server {
...
location ~ ^/uploads/(?<file>.*) {
add_header X-Robots-Tag $robots;
}
...
}
或没有正则表达式:
map $uri $robots {
/uploads/2021/06/file-1.pdf noindex;
/uploads/2018/11/file-2.pdf noindex;
/uploads/2011/07/file-3.pdf noindex;
# default value will be an empty string
}
server {
...
location /uploads/ {
add_header X-Robots-Tag $robots;
}
...
}
如果 add_header
指令的第二个参数为空字符串,则它不会向响应添加 header。
您还应该注意 this 文档摘录:
These directives are inherited from the previous configuration level if and only if there are no add_header
directives defined on the current level.
我需要为多个特定的上传文件添加一个noindex
标签,但它们都属于不同的年月上传文件夹,例如:
/var/www/public/app/uploads/2021/06/file-1.pdf
/var/www/public/app/uploads/2018/11/file-2.pdf
/var/www/public/app/uploads/2011/07/file-3.pdf
我最初是这样做的,但没有成功:
location ~ "^(.*)/app/uploads/(.*)$" {
location ~ ^/(file-1.pdf|file-2.pdf|file-3.pdf)$ {
add_header X-Robots-Tag "noindex";
}
}
我还没有访问权限来测试,但这是我打算做的:
location ~ "/var/www/public/app/uploads/(.*)$" {
location ~ ^/(file-1.pdf|file-2.pdf|file-3.pdf)$ {
add_header X-Robots-Tag "noindex";
}
}
我想知道是否有更好的方法,或者这是否有效。现在有 27 个特定文件我必须这样做,所以我不确定 file-1.pdf|file-2.pdf|file-3.pdf
是否是我的最佳选择。
感谢任何帮助,谢谢。
首先,你肯定是错误地使用了location
指令。假设您的服务器根目录是 /var/www/public/app
并且您的示例请求是 http://example.com/uploads/2021/06/file-1.pdf
规范化 URI(需要检查 location
或 rewrite
指令)将是 /uploads/2021/06/file-1.pdf
。将捕获这些请求并添加所需 header 的位置示例是
location ~ ^/uploads/(?<file>.*) {
if ($file ~ ^(?:2021/06/file-1\.pdf|2018/11/file-2\.pdf|2011/07/file-3\.pdf))$ {
add_header X-Robots-Tag "noindex";
}
}
这里的(?<file>.*)
是so-callednamed capture group以备后用。也可以使用两个嵌套位置:
location /uploads/ {
location ~ /(?:2021/06/file-1\.pdf|2018/11/file-2\.pdf|2011/07/file-3\.pdf)$ {
add_header X-Robots-Tag "noindex";
}
}
您也可以使用 map
指令(虽然我不知道这是否可以称为“更好的方法”):
map $file $robots {
2021/06/file-1.pdf noindex;
2018/11/file-2.pdf noindex;
2011/07/file-3.pdf noindex;
# default value will be an empty string
}
server {
...
location ~ ^/uploads/(?<file>.*) {
add_header X-Robots-Tag $robots;
}
...
}
或没有正则表达式:
map $uri $robots {
/uploads/2021/06/file-1.pdf noindex;
/uploads/2018/11/file-2.pdf noindex;
/uploads/2011/07/file-3.pdf noindex;
# default value will be an empty string
}
server {
...
location /uploads/ {
add_header X-Robots-Tag $robots;
}
...
}
如果 add_header
指令的第二个参数为空字符串,则它不会向响应添加 header。
您还应该注意 this 文档摘录:
These directives are inherited from the previous configuration level if and only if there are no
add_header
directives defined on the current level.