22

我正在运行 nginx 0.6.32 作为 couchdb 的代理前端。我在数据库中有我的 robots.txt,可通过http://www.example.com/prod/_design/mydesign/robots.txt 访问。我也有我的 sitemap.xml,它是动态生成的,在一个类似的 url 上。

我尝试了以下配置:

server {
  listen 80;
  server_name example.com;
  location / {
  if ($request_method = DELETE) {
    return 444;
  }
  if ($request_uri ~* "^/robots.txt") {
    rewrite ^/robots.txt http://www.example.com/prod/_design/mydesign/robots.txt permanent;
  }

  proxy-pass http://localhost:5984;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这似乎可以作为重定向工作,但有没有更简单的方法?

4

6 回答 6

65

或者你可以简单地把它放在它自己的位置 -

location /robots.txt {
    alias /Directory-containing-robots-file/robots.txt;
} 
于 2010-09-19T15:42:52.213 回答
20

我想你想设置一个位置。关键部分是“=”指令。

location = /robots.txt {
    alias /your_full_path/robots.txt ;
}

(当我没有包含 = 时,它仍然去了默认的 nginx 根位置)

像下面这样设置它会导致所有 /robots.txt* 请求从 /var/foo 中读取。所以 /robots.txt.bing 尝试从磁盘读取 /var/foo/robots.txt.bing。“^~”表示它是请求开头的正则表达式匹配。

location ^~ /robots.txt {
    root /var/foo;
}
于 2011-12-06T16:55:39.510 回答
5

用 http://... 重写是为了做重定向。您可能正在寻找:

最后重写 ^/robots.txt /prod/_design/mydesign/robots.txt;
于 2009-07-09T14:10:54.867 回答
3

这也应该起作用,并且性能可能会稍好一些。

location /robots.txt { alias /var/www/django/mysite/static/robots.txt; }
于 2011-04-06T17:23:10.193 回答
1

请注意,第一个参数是正则表达式,因此您可能应该 escape 。并匹配行尾。

location / {
    rewrite ^/robots\.txt$ /static/robots.txt last;
    ...
}

NginxHttpRewriteModule

于 2009-10-22T12:42:27.757 回答
0

考虑到robots.txt它位于/var/www/mysite/static/robots.txt,以下对我有用:

location = /robots.txt {
    root /var/www/mysite/static/;
}
于 2016-09-05T12:29:10.423 回答