nginx 如果主机是子域(一个服务器块),则显示单独的robots.txt

tp5buhyn  于 2022-11-22  发布在  Nginx
关注(0)|答案(1)|浏览(204)

我创建了2个单独的robot.txt文件:robots.txtdisabled-robots.txt
我在nginx配置中有一个带有别名的服务器块。我试图实现的是:

  • example.com/robots.txt〉机器人. txt
  • v2.example.com/robots.txt〉已禁用的机器人. txt
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name v2.example.com example.com;

    location = /robots.txt {
       // I think I need to update here, but confused about what I should put

       // if ($host == v2.example.com) {
       //     show disabled-robots.txt
       // } else {
       //     show robots.txt
       // }
    }
}

我在StackOverflow上找到的所有示例都显示了2个单独的服务器块,但我希望保留一个服务器块。

up9lanfz

up9lanfz1#

不要在location(包含problems in this context)中使用if,而要使用带有try_filesmap
例如:

map $host $which_robot {
    default         /robots.txt;
    v2.example.com  /disabled-robots.txt;
}
server {
    ...

    location = /robots.txt {
        root /path/to/directory;
        try_files $which_robot =404;
    }
}

请注意,map必须在server区块之外宣告。请参阅Map文件。

相关问题