我想为给定的网址提供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
我一直在尝试这种重写,但它不能保持一致,我的意思是一些子域工作,其他一些没有,除了这个在服务器中没有太多其他配置
我在这里有什么问题吗?
谢谢!
答案 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;
}
希望它有所帮助!