web-dev-qa-db-ja.com

robots.txtとsitemap.xmlのURLにリダイレクトするようにnginxを構成するにはどうすればよいですか

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;
}

これはリダイレクトとして機能しているように見えますが、もっと簡単な方法はありますか?

21
timbo

または、単に独自の場所に配置することもできます-

location /robots.txt {
    alias /Directory-containing-robots-file/robots.txt;
} 
58
PlanetUnknown

場所を設定したいと思います。重要な部分は「=」ディレクティブです。

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;
}
19
dols

http:// ...で書き換えることは、リダイレクトを行うことを目的としています。あなたはおそらく探しています:

 ^/robots.txt/prod/design/mydesign/robots.txtを最後に書き換えます; 
5
rzab

これも機能するはずであり、mayパフォーマンスがわずかに向上します。

location /robots.txt { alias /var/www/Django/mysite/static/robots.txt; }
3
Gattster

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

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

NginxHttpRewriteModule

1
serbaut

robots.txt/var/www/mysite/static/robots.txtにあることを考えると、次のことがうまくいきました。

location = /robots.txt {
    root /var/www/mysite/static/;
}
0