在 NGINX 上对某些页面设置 noindex

在 NGINX 上对某些页面设置 noindex

我想设置一些 URL 为 noindex。如果任何 URL 包含?语言=| (从...开始/插入| (从...开始/帐户它应该是 noindex,通过在 NGINX 配置中添加 HTTP 标头。

我之前尝试过下面的代码,

location ~ .*/(?:?lang|plugin|account)/.* {
    add_header X-Robots-Tag "noindex, follow" always;      
}

我在我的网站上使用的其他 NGINX 位置指令:(我的脚本的这些默认指令运行良好。

#Disable access to sensitive files
location ~* /(app|content|lib)/.*\.(po|php|lock|sql)$ {
    deny all;
}
#CORS headers
location ~* /.*\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js) {
    add_header Access-Control-Allow-Origin "*";
}
#Upload path for image content only and set 404 replacement
location ^~ /images/ {
    location ~* (jpe?g|png|gif) {
        log_not_found off;
        error_page 404 /content/images/system/default/404.gif;
    }
    return 403;
}
#Pretty URLs
location / {
    index index.php;
    try_files $uri $uri/ /index.php?$query_string;
}

虽然我重新加载 Nginx 时没有错误消息,但是 noindex 指令并没有出现。

答案1

location指令仅匹配规范化的 URI,这些 URI 不包含查询参数。这就是您无法匹配的原因?lang

为了匹配那个,您可以使用查询参数变量来进行匹配。

if ($arg_lang) {
    add_header X-Robots-Tag "noindex, follow" always; 
}

此代码片段应包含在location /块中。

为了匹配其他情况,我会执行以下操作:

location /plugin {
    add_header X-Robots-Tag "noindex, follow" always; 
    try_files $uri $uri/ /index.php?$query_string;
}

location /account {
    add_header X-Robots-Tag "noindex, follow" always; 
    try_files $uri $uri/ /index.php?$query_string;
}

try_files其中包含语句非常重要,因为只location选择使用一个块。

相关内容