22

couchdbのプロキシフロントエンドとしてnginx0.6.32を実行しています。データベースにrobots.txtがあり、http://www.example.com/prod/_design/mydesign/robots.txtとしてアクセスできます。同様のURLで動的に生成されるsitemap.xmlもあります。

私は次の設定を試しました:

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 に答える
1

最初のパラメーターは正規表現であるため、おそらくエスケープする必要があることに注意してください。行末に一致します。

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 に答える