我尝试向我的 Django 站点添加有效的规范标签。所以我必须添加没有查询参数的规范网址。我找到了很好的解决方案,但我遇到了无法解决的问题。我的标签是这样的:{% if request.GET %} <link rel="canonical" href="https://{{ request.get_host }}{{ request.path }}">{% endif %}这是一个很好的解决方案,但是在带有 url 的页面中的真实站点中,https://example.com/about-us?page=3我得到了这个规范的 urlhttps://www.example.com/about-us为什么我www在站点域之前获得规范 url这是我的ALLOWED_HOST在settings.py:ALLOWED_HOSTS = [ '127.0.0.1', 'www.example.com', 'example.com', 'localhost',]如何在没有 的情况下获得有效的规范网址www?
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
因为您正在使用request.get_host
,这将解析为用户在浏览器中输入的任何内容。您可能已将 DNS 记录设置为接受带或不带 www 的域。Django 并不关心它所服务的域,除非/除非您使用它的 Sites 框架(您的示例代码不涉及 Sites 框架,所以我猜你不是)。因此,Django 仅根据 URL 路径进行响应,而忽略域。
您是在问是否可以从入站请求中删除“www”?当然,您可以在 Web 服务器(apache/nginx 等)层使用特定于这些 Web 服务器的重定向来执行此操作。或者您可以让请求通过 Web 服务器并在应用程序服务器层 (Django) 使用自定义中间件拦截它。这是一个例子。
请注意,您不能使用Django 中内置的重定向应用程序,因为它只对路径进行操作,而您想要操作传入域本身。
因此,您的选择是:调整您的 Web 服务器,或将中间件模块添加到您的 Django 项目。
该ALLOWED_HOSTS
设置与您的问题无关。
旁白:您的问题有点令人困惑,因为您首先询问已删除的查询参数?page=3
,然后转而询问域中的 www。如果您询问查询参数,请编辑您的问题,因为这保证了不同的答案。
添加回答
举报
0/150
提交
取消