2013-08-24 47 views
8

這是我當前服務的robots.txtDjango的服務的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的服務。

回答

27

是的,如果文件是靜態的,robots.txt不應該由Django提供。嘗試這樣的事情在你的Nginx的配置文件:

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

這裏看到更多的信息:http://wiki.nginx.org/HttpCoreModule#alias

同樣適用於favicon.ico的文件,如果你有一個。

+0

很好的解決方案。但如果我無法訪問該文件會發生什麼? – BlaShadow

+0

@BlaShadow您無權訪問哪個文件? robot.txt? – Rexford

+0

爲什麼它應該由Nginx提供? – dspacejs

1

我知道這是一個很晚的回覆,當我沒有訪問Web服務器配置時,我正在尋找類似的解決方案。因此,對於任何人尋找一個類似的解決方案,我發現這個頁面: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規則不整齊。