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