Как перенаправить все запросы с URL-адресами, начинающимися с «www», на незащищенный домен? - PullRequest
3 голосов
/ 19 февраля 2012

Мне удалось добавить пользовательские домены Heroku для моего приложения. Я хотел бы знать, как перехватывать запросы, начинающиеся с www, и перенаправлять их в пустой домен. Например, у меня есть следующие пользовательские домены, сопоставленные с моим приложением Heroku:

www.myapp.com
myapp.com

Запросы для http://myapp.com и http://www.myapp.com являются успешными, но www остается включенным.

Цель

Я хочу, чтобы все запросы на http://www.myapp.com были перенаправлены на http://myapp.com. Это также должно работать для других путей, например http://www.myapp.com/some/foo/bar/path перенаправляет на http://myapp.com/some/foo/bar/path. Я хочу что-то вроде этого: http://www.stef.io и посмотреть, как www. ушел из адресной строки.

Инструкции, которые я нашел в Google до сих пор, касаются редактирования моего .htaccess файла, но я работаю на Heroku с приложением Python на платформе Flask.

Ответы [ 2 ]

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

Рекомендуемое решение для этого - перенаправление уровня DNS (см. heroku help ).

Кроме того, вы можете зарегистрировать функцию before_request:

from urlparse import urlparse, urlunparse

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

Это перенаправит все запросы www на не-www, используя ответ «HTTP 301 перемещен навсегда».

0 голосов
/ 19 февраля 2012

Я не привык к Flask, но вы можете настроить маршрут, который соответствует /^www./, а затем перенаправить его на URL без "www".

Возможно, вы захотите проверить http://werkzeug.pocoo.org/docs/routing/#custom-converters или http://werkzeug.pocoo.org/docs/routing/#host-matching

...