web-dev-qa-db-ja.com

django robots.txtを効率的に提供する

これがrobots.txtを提供する私の現在の方法です

url(r'^robots\.txt/$', TemplateView.as_view(template_name='robots.txt',
                                            content_type='text/plain')),

これが最善の方法だとは思いません。純粋な静的リソースであり、静的に提供された方がよいと思います。しかし、私のDjangoアプリの構造は、静的ルートとそれに続くすべての静的ファイルが

http://my.domain.com/static/stuff-here

何かご意見は?私はDjangoですが、

 TemplateView.as_view(template_name='robots.txt',
                                  content_type='text/plain')

nginxで提供される静的ディレクトリへの静的呼び出しよりもはるかに多くのリソースを消費しているように見えます。

23
Lucas Ou-Yang

はい、robots.txtはDjangoファイルが静的な場合は提供されるべきではありません。Nginx構成ファイルで次のようなことを試してください:

location  /robots.txt {
    alias  /path/to/static/robots.txt;
}

詳細については、こちらを参照してください: http://wiki.nginx.org/HttpCoreModule#alias

Favicon.icoファイルがある場合は、同じことが当てはまります。

Apacheconfigの同等のコードは次のとおりです。

Alias /robots.txt /path/to/static/robots.txt
51
HankMoody

私はこれが遅い返信であることを知っています、私はウェブサーバー設定へのアクセスがないときに同様の解決策を探していました。したがって、同様の解決策を探している他の人のために、私はこのページを見つけました: http://www.techstricks.com/adding-robots-txt-to-your-Django-project/

これは、これをプロジェクトurl.pyに追加することを提案します。

from Django.conf.urls import url
from Django.http import HttpResponse

urlpatterns = [
    #.... your project urls
    url(r'^robots.txt', lambda x: HttpResponse("User-Agent: *\nDisallow:", content_type="text/plain"), name="robots_file"),
]

これは、テンプレートファイルを使用するよりも少し効率的であると思いますが、複数の「Disallow:」オプションが必要な場合は、URLルールが乱雑になる可能性があります。

7