Как перенаправить на www. версия моего сайта Flask на Heroku?

У меня есть приложение Python Flask, работающее на Heroku (Cedar stack) с двумя настраиваемыми доменами (один с одним и без субдомена www). Я хотел бы перенаправить все входящие запросы на www. версия запрошенного ресурса (обратная задача ). Я думаю, мне нужно некоторое связующее ПО WSGI для этого, но я не могу найти хороший пример.

Как мне это сделать?

4 Solutions collect form web for “Как перенаправить на www. версия моего сайта Flask на Heroku?”

Более простым решением, чем создание отдельного приложения Heroku, будет функция before_request .

 from urlparse import urlparse, urlunparse @app.before_request def redirect_nonwww(): """Redirect non-www requests to www.""" urlparts = urlparse(request.url) if urlparts.netloc == 'example.com': urlparts_list = list(urlparts) urlparts_list[1] = 'www.example.com' return redirect(urlunparse(urlparts_list), code=301) 

Это перенаправит все запросы, отличные от www, на www, используя ответ «HTTP 301 Moved Permently».

Согласно документам Heroku, у вас есть правильная идея об использовании субдомена www (например, http://www.foo.com) и домена apex (например, foo.com). Их предложение для решения этой проблемы – использовать перенаправление DNS-сервера:

Цитировать:

Переадресация субдомена

Переадресация поддомена приводит к постоянному переадресации 301 к указанному поддомену для всех запросов в домене apex, поэтому все текущие и будущие запросы правильно маршрутизируются, а полное имя WWW отображается в поле местоположения пользователя.

Почти все поставщики DNS предлагают услуги перенаправления домена, иногда также называемые переадресацией доменов. DNSimple обеспечивает удобную переадресацию URL-адресов, видимую здесь, перенаправлением с домена apex heroku-sslendpoint.com на субдомен http://www.heroku-sslendpoint.com.

Источник: http://devcenter.heroku.com/articles/avoiding-apex-domains-dns-arecords#subdomain_redirection

Надеюсь, это поможет!

Один из возможных подходов заключался бы в том, чтобы добавить функцию для прослушивания на request_started и выполнить соответствующее перенаправление.

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

То, что я закончил, было создание второго приложения Heroku, назначение ему не-www hostname и использование маршрута catch All Flask для перенаправления на версию www, сохраняя путь неповрежденным.

  • Кэширование Django только для аутентифицированных пользователей
  • Heroku: зависимости Python в частных репозиториях без сохранения моего пароля
  • heroku: для этого приложения не может быть обнаружен язык по умолчанию
  • Ошибка при запуске «python manage.py syncdb» локально, но без ошибок при выполнении той же команды через Heroku
  • Django - не удалось нажать некоторые ссылки на git@heroku.com
  • Heroku / python не удалось обнаружить set buildpack
  • что такое IP-адрес моего приложения heroku
  • Как обновить зависимость в проекте Python на Heroku
  • Python - лучший язык программирования в мире.