我想设置一些 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
选择使用一个块。