Лучший способ перенаправить appid.appspot.com в пользовательский домен для приложения Django, размещенного на движке приложения. - PullRequest
1 голос
/ 17 апреля 2019

Я заранее прошу прощения за этот вопрос, так как он задавался много раз, но я не смог найти специфическое решение для Django, которое может решить эту проблему.

Описание:

  • Джанго: 2,1
  • Python: 3,7
  • Хост приложений: Google app engine
  • Провайдер домена: Домены Google

У меня есть приложение Django, размещенное на движке приложений Google с URL-адресом [id] .appspot.com. Я также зарегистрировал собственный домен, например, www.example.com на доменах Google. Я хочу перенаправить любого, кто пытается получить доступ к [id] .appspot.com, на сайт www.example.com (301). Мой пользовательский домен работает нормально.

До сих пор, основываясь на поиске в google и stackoverflow, я обнаружил следующее:

  1. Добавить следующий канонический тег на каждую страницу
<link rel="canonical" href="https://www.example.com/" />

Это должно уведомить поисковые системы, какой домен вы предпочитаете, когда один и тот же контент доступен из нескольких доменов. Я добавил это в заголовок своего сайта, но это похоже на обходной путь.

  1. Используйте функцию проверки и перенаправления : В этом посте есть несколько хороших подходов для приложений webapp2. Однако это 10-летняя публикация, поэтому не уверен, что какое-либо из этих решений напрямую работает или может потребоваться изменение кода.

В ответ «Алекс Мартелли» предложил проверить os.environ ['HTTP_HOST'] .ndswith ('. Appspot.com') и перенаправить. Я не уверен, как это сделать в приложении Django, размещенном на движке приложения.

В том же посте есть еще один способ добиться этого путем переопределения webapp2.RequestHandler.initialize. но опять же я не думаю, что это применимо к Джанго.

Я ищу конкретный ответ для Django, является ли параметр перенаправления в app.yaml или dispatch.yaml похожим на это сообщение в блоге или переопределение функции django для перенаправления с [id] .appspot.com на www .example.com.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Наконец-то я начал работать со следующим кодом, однако он требует тщательного тестирования.

    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

Пожалуйста, дайте мне знать, если у кого-нибудь есть какие-либо предложения.

0 голосов
/ 18 апреля 2019

На уровнях app.yaml или dispatch.yaml возможности перенаправления URl отсутствуют.

Ссылки, которые вы делаете, довольно старые, применимы к стандартной среде GAE 1-го поколения, а не к вашей (у вас Python 3.7так что это либо гибкая среда, либо стандартная среда 2-го поколения)

Вам нужно позаботиться о перенаправлении внутри самого приложения, так что вам нужно проверять только подходы, специфичные для Django, в значительной степени забывая оGAE с этой точки зрения.

Я на самом деле не пользователь Django, но я думаю, что эти могут были бы полезны:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...