Я запускаю статический сайт в GAE и использую собственный домен (назовем его example.com
) с включенными сертификатами SSL. Я хочу канонизировать URL-адреса в https://www.example.com/
. Это означает перехват любых запросов к myproject.appspot.com
, обычному HTTP и / или голому домену и перенаправление на www
через HTTPS.
Я понимаю, что невозможно поместить логику перенаправления в app.yaml
, но в идеале я хотел бы сохранить там логику обслуживания статических файлов и иметь только код приложения для перенаправления. (В отличие от статической подачи в коде приложения.)
Вот что у меня есть на данный момент:
Содержание файла app.yaml
:
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
static_files: www/index.html
upload: www/index.html
- url: /(.*)
static_files: www/\1
upload: www/(.*)
Содержание файла dispatch.yaml
:
dispatch:
- url: "myproject.appspot.com/*"
module: canonicalizer
Содержание файла canonicalizer.yaml
:
module: canonicalizer
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: canonicalizer.app
Содержание файла canonicalizer.py
:
import webapp2
def get_redirect_uri(handler, *args, **kwargs):
return 'https://www.example.com/' + kwargs.get('path')
app = webapp2.WSGIApplication([
webapp2.Route('/<path:.*>',
webapp2.RedirectHandler,
defaults={'_uri': get_redirect_uri, '_code': 302}),
], debug=True)
Как видите, я пока только пытался реализовать перенаправление myproject.appspot.com
. Мне не удалось заставить его работать; myproject.appspot.com
по-прежнему обслуживает контент, а не перенаправляет в личный домен.
Я видел похожий SO вопрос и использовал его как основу для моего кода выше. Я довольно внимательно следил за ним, поэтому не уверен, что он устарел или в нем отсутствуют детали.
Я не очень хорошо знаком с webapp2. Также открыт для решений в другой структуре или даже на другом языке программирования.