在Django中更改robot.txt

时间:2018-06-19 13:04:04

标签: django

我已经使用Django创建了一个网站,并使用代码添加了robots.txt:

path('robots.txt', lambda r: HttpResponse("User-agent: *\nDisallow: /", content_type="text/plain")),  在我的主要 urls.py 中,它很好用,但现在我需要为其添加一些规则..如何做

3 个答案:

答案 0 :(得分:1)

robots.txt不仅是HttpResponse。这是实际文件。

您可以继续使用lambda函数来手动制作整个响应。在这种情况下,您需要继续建立字符串响应。

或者您可以将文件写入服务器磁盘,为其写入规则等,并根据请求向robots.txt

提供该文件

Further reading on robots.txt(与Django无关)

有关SO的问题:django serving robots.txt efficiently

答案 1 :(得分:1)

您可以在模板下编写robots.txt,然后通过Django为其提供以下服务:

from django.conf.urls import url
from django.views.generic import TemplateView

urlpatterns = [
    url(r'^robots.txt$', TemplateView.as_view(template_name="robots.txt", content_type="text/plain"), name="robots_file")
]

不过,建议的方法是通过您的Web服务器指令进行服务。

Nginx:

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

Apache:

<Location "/robots.txt">
 SetHandler None
 Require all granted
</Location>
Alias /robots.txt /var/www/html/project/robots.txt

答案 2 :(得分:1)

在您的主应用urls.py

from django.urls import path, include
from django.views.generic.base import TemplateView


urlpatterns = [
    # If you are using admin
    path('admin/', admin.site.urls),
    path(
        "robots.txt",
        TemplateView.as_view(template_name="robots.txt", content_type="text/plain"),
    ),
    path(
        "sitemap.xml",
        TemplateView.as_view(template_name="sitemap.xml", content_type="text/xml"),
    ),
]

然后转到模板的根文件夹并创建robots.txt文件,您可以添加类似的内容

User-Agent: *
Disallow: /private/
Disallow: /junk/

再次转到您的tempalte根文件夹并创建另一个文件sitemap.xml,您可以添加类似的内容或使用Sitemaps生成器正确完成此操作,这是一个示例:

<url>
<loc>https://examplemysite.com</loc>
<lastmod>2020-02-01T15:19:02+00:00</lastmod>
<priority>1.00</priority>
</url>

现在,如果您运行python manage.py runserver,则可以对其进行127.0.0.1:8000/sitemap.xml/robots.txt的测试,它将可以正常工作。但这在您的生产服务器中不起作用,因为您需要让nginx知道这一点并给出路径。

因此,您将需要SSH进入服务器,例如在nginx中,您应该拥有一个在构建服务器时命名的配置文件。您应该将CD插入该文件夹中的/etc/nginx/sites-available,您应该拥有默认文件(您应该将其保留),并且应该在那里命名另一个文件,通常应与项目名称或网站名称相同。使用nano打开该文件,但先备份。接下来,您可以像这样添加两个文件的路径:

请注意路径,但是显然您可以看一下文件,并且应该了解到静态文件或媒体的路径。所以你可以做这样的事情。

location  /robots.txt {
    root  /home/myap-admin/projects/mywebsitename/templates;
}
location  /sitemap.xml {
    root  /home/myap-admin/projects/mywebsitename/templates;
}

/home/myap-admin/projects/mywebsitename/templates,您应该知道mywebsitename的路径。这只是通往模板文件夹的示例路径。

确保随后运行service nginx restart