将appid.appspot.com重定向到应用引擎上托管的Django应用的自定义域的最佳方法

时间:2019-04-17 18:28:20

标签: django python-3.x google-app-engine

由于这个问题被问过很多次,所以我预先为这个问题道歉,但是我找不到可以解决此问题的Django专用解决方案。

说明:

  • Django:2.1
  • Python:3.7
  • 应用程序主机:Google应用程序引擎
  • 域名提供商: Google网域

我在Google App引擎上托管了一个带有[id] .appspot.com网址的Django应用。我还注册了一个自定义域,例如Google网域上的www.example.com。我想将尝试访问[id] .appspot.com的任何人都永久重定向到www.example.com(301)。我的自定义域运行正常。

到目前为止,基于google和stackoverflow搜索,我发现了以下内容:

  1. Add following canonical tag to each page
<link rel="canonical" href="https://www.example.com/" />

当来自多个域的相同内容可用时,这应该通知搜索引擎您更喜欢哪个域。我已将此添加到我的网站标题中,但这似乎是一种解决方法。

  1. Use check and redirect function:本文为webapp2应用提供了一些不错的方法。但是,它已有10年的历史了,因此不确定这些解决方案中的任何一种是否可以直接工作或可能需要更改代码。

在答案“ Alex Martelli”中,建议检查os.environ ['HTTP_HOST']。endswith('。appspot.com')并重定向。我不确定如何在应用引擎托管的Django应用中完成此操作。

在同一篇文章中,还有另一种方法可以通过重写webapp2.RequestHandler.initialize来实现。但是我不认为它适用于Django。

我正在寻找Django特定的答案,无论是app.yaml或dispatch.yaml中类似于此blog post的重定向设置,还是django函数重写,都可以从[id] .appspot.com重定向到www.example。 com。

2 个答案:

答案 0 :(得分:0)

app.yamldispatch.yaml级别没有UR1重定向功能。

您创建的引用相当古老,适用于GAE第1代标准环境,而不是您的(您使用python 3.7,因此是灵活环境或第2代标准环境)

您需要照顾好应用程序内部的重定向,因此您只需要检查Django特定的方法,从这个角度来看,几乎忘记了GAE。

我不是真正的Django用户,但我认为这些可能很有用:

答案 1 :(得分:0)

最后,我将其与以下代码一起使用,但是需要大量测试。

    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

如果有人有任何建议,请告诉我。