由于这个问题被问过很多次,所以我预先为这个问题道歉,但是我找不到可以解决此问题的Django专用解决方案。
说明:
我在Google App引擎上托管了一个带有[id] .appspot.com网址的Django应用。我还注册了一个自定义域,例如Google网域上的www.example.com。我想将尝试访问[id] .appspot.com的任何人都永久重定向到www.example.com(301)。我的自定义域运行正常。
到目前为止,基于google和stackoverflow搜索,我发现了以下内容:
<link rel="canonical" href="https://www.example.com/" />
当来自多个域的相同内容可用时,这应该通知搜索引擎您更喜欢哪个域。我已将此添加到我的网站标题中,但这似乎是一种解决方法。
在答案“ 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。
答案 0 :(得分:0)
app.yaml
或dispatch.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
如果有人有任何建议,请告诉我。