2013-08-24 16 views
8

Ecco il mio attuale metodo di servire robots.txtdjango servono robots.txt in modo efficiente

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

Non credo che questo sia il modo migliore. Penso che sarebbe meglio se fosse solo una pura risorsa statica e servita in modo statico. Ma il modo in cui è strutturata la mia app django è che la radice statica e tutti i successivi file statici si trovano in

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

Qualche idea? Sono dilettante Django, ma

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

sembra molto più consumo di risorse di una semplice chiamata statica alla mia directory statica che viene servita su nginx.

risposta

27

Sì, il file robots.txt non dovrebbe essere servito da Django se il file è statico. Provare qualcosa di simile nel file di configurazione Nginx:

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

Vedi qui per ulteriori informazioni: http://wiki.nginx.org/HttpCoreModule#alias

stessa cosa vale per il file favicon.ico se ne hai uno.

+0

bella soluzione. ma cosa succede se non ho accesso a quel file? – BlaShadow

+0

@BlaShadow Non hai accesso a quale file? il robot.txt? – Rexford

+0

Perché dovrebbe essere servito da Nginx? – dspacejs

1

So che questa è una risposta tardiva, cercavo una soluzione simile quando non ho accesso alla configurazione del server web. Quindi, per chiunque altro alla ricerca di una soluzione simile, ho trovato questa pagina: http://www.techstricks.com/adding-robots-txt-to-your-django-project/

che suggerisce l'aggiunta di questa al progetto 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"), 
] 

che credo dovrebbe essere leggermente più efficiente che l'utilizzo di un modello file, anche se potrebbe rendere disordinate le regole del tuo URL se sono necessarie più opzioni 'Disallow:'.