Как мне перенаправить на www.версия моего сайта Flask на Heroku? - PullRequest
9 голосов
/ 19 марта 2012

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

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

Ответы [ 4 ]

14 голосов
/ 10 июня 2012

Более простым решением, чем создание отдельного приложения 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 перемещен постоянно».

3 голосов
/ 19 марта 2012

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

Цитировать:

Перенаправление поддоменов

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

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

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

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

1 голос
/ 19 марта 2012

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

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

0 голосов
/ 01 мая 2012

Я закончил тем, что создал второе приложение Heroku, присвоив этому хосту имя, не относящееся к www, и использовал маршрут catch all Flask для перенаправления на версию www, сохраняя путь в целости.

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