Nginx重写规则取决于子域

时间:2013-12-09 12:16:05

标签: nginx rewrite

我想为给定的网址提供2个不同版本的文件,具体取决于网站子域名。

以下是我现在正在尝试的内容:

location /robots.txt {
if ($http_host ~* [www|fr|es|uk|de]\.example\.com) {
       rewrite ^/robots.txt$ /robots_index_all.txt break;
    }
    rewrite ^/robots.txt$ /robots_dont_index_anything.txt break;
}

所以,当机器人在子域名www,fr,es,uk和de

下请求/robots.txt时,我想要的行为就是提供robots_index_all.txt文件。

然后,如果/robots.txt请求是在任何其他子域中进行的,我想提供/robots_dont_index_anything.txt

我一直在尝试这种重写,但它不能保持一致,我的意思是一些子域工作,其他一些没有,除了这个在服务器中没有太多其他配置

我在这里有什么问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我讨厌给出“你握错了”类型的答案,但在这里你去......首先,don't use "if"除非你真的需要。其次,不要使用变量,它们也是如此:)

无论如何,在这种情况下,对我来说有什么用,当我有一个全能的虚拟主机是一个全部重写,类似于:

rewrite ^/robots.txt$ /robots/$http_host.txt last;

甚至尝试更具冒险精神的事情:

location = /robots.txt {
      try_files /robots/$http_host.txt /robots/robots.txt;
}

所以你实际上将管理每个子域的文件。

而且OP表示他有900多个域名实际上是服务器,我要做的就是设置一个901的域名来响应机器人并将两个机器人文件放在那里。然后只需代理原始“域”的请求:

location = /robots.txt {
      proxy_pass http://my-robots-server-ip/robots/$http_host.txt
}

并且代理应该有这样的东西(好吧,有限制):

location /robots/(.*)\.(.*)\.(.*)\.txt {
      try_files /robots/$1.txt /robots/$1.$2.txt /robots/$1.$2.$3.txt /robots/default.txt;
}
希望它有所帮助!