我已经使用Django创建了一个网站,并使用代码添加了robots.txt:
path('robots.txt', lambda r: HttpResponse("User-agent: *\nDisallow: /", content_type="text/plain")),
在我的主要 urls.py 中,它很好用,但现在我需要为其添加一些规则..如何做
答案 0 :(得分:1)
robots.txt
不仅是HttpResponse
。这是实际文件。
您可以继续使用lambda
函数来手动制作整个响应。在这种情况下,您需要继续建立字符串响应。
或者您可以将文件写入服务器磁盘,为其写入规则等,并根据请求向robots.txt
Further reading on robots.txt
(与Django无关)
答案 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