django - 将 appid.appspot.com 重定向到应用引擎上托管的 Django App 的自定义域的最佳方法
问题描述
我提前为提出这个问题道歉,因为它被问了很多次,但我找不到可以解决这个问题的 Django 特定解决方案。
描述:
- 姜戈:2.1
- 蟒蛇:3.7
- 应用宿主:谷歌应用引擎
- 域提供者:谷歌域
我有一个 Django 应用程序托管在带有 [id].appspot.com url 的谷歌应用程序引擎上。我还在谷歌域上注册了一个自定义域,例如 www.example.com。我想将尝试访问 [id].appspot.com 的任何人重定向到 www.example.com 永久(301)。我的自定义域运行良好。
到目前为止,基于 google 和 stackoverflow 搜索,我发现了以下内容:
<link rel="canonical" href="https://www.example.com/" />
当来自多个域的相同内容可用时,这应该通知搜索引擎您更喜欢哪个域。我已将此添加到我的站点标题中,但这似乎是一种解决方法。
- 使用检查和重定向功能:这篇文章为 webapp2 应用程序提供了一些很好的方法。然而,这是 10 年前的帖子,所以不确定这些解决方案中的任何一个是否可以直接工作或可能需要更改代码。
在答案“Alex Martelli”中建议检查 os.environ['HTTP_HOST'].endswith('.appspot.com') 并重定向。我不确定如何在应用程序引擎上托管的 Django 应用程序中完成它。
在同一篇文章中,还有另一种方法可以通过覆盖 webapp2.RequestHandler.initialize 来实现。但我再次认为它不适用于 Django。
我正在寻找 Django 特定的答案,无论是 app.yaml 或 dispatch.yaml 中类似于此博客文章的重定向设置还是 django 函数覆盖以从 [id].appspot.com 重定向到 www.example.com。
解决方案
最后我让它使用以下代码,但是它需要广泛的测试。
from django.http import HttpResponsePermanentRedirect
from django.utils.deprecation import MiddlewareMixin
SITE_DOMAIN = "www.example.com"
class CanonicalDomainMiddleware(MiddlewareMixin):
response_redirect_class = HttpResponsePermanentRedirect
def process_request(self, request):
host = request.get_host()
if host == 'id.appspot.com':
redirect_url = ('%s://%s%s' % (request.scheme,
SITE_DOMAIN,request.get_full_path()))
return self.response_redirect_class(redirect_url)
else:
return
如果有人有任何建议,请告诉我。
推荐阅读
- python - AttributeError: 模块 'seaborn' 没有属性 'lineplot' - 已经更新到 0.9.0
- react-native - 地图框不适用于expo react native,有什么替代方法?
- javascript - 如何使用 jQuery 向对象添加径向/复选框值?
- asp.net-mvc - 获取 PowerBI Embedded 的 Azure PowerBI 容量的授权代码
- javascript - 从一个对象在反应 js 中创建一个选择选项
- java - 如何获取内部绑定类的对象
- java - 有没有办法在 QAS 中完全中止执行?
- sql-server - ONLY 关键字 - 含义
- laravel-5.5 - 为什么我总是在刀片模板中获取日志 Auth::user() on null?
- mongodb - MongoDB中的奇怪日期对象