Маршруты с пользовательскими доменами с использованием Flask

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

GET-запросы к этому URL-адресу работают как положено: http://user.example.com:5000/book/12345/

GET-запросы к этому URL-адресу работают как положено: http://custom.com:5000/book/12345/

Получите запросы на этот URL-адрес попытки перенаправить, но не удается: http://custom.com:5000/book/12345

Flask в конечном итоге перенаправляет браузер на этот URL, который, конечно, не работает: http://<invalid>.example.com:5000/book/12345/

Есть ли другой способ обработки пользовательских доменов? Вот полный минимальный пример, чтобы воспроизвести это. Я установил custom.com, example.com. и user.example.com, чтобы указать 127.0.0.1 в моем файле /etc/hosts в моей среде разработки, чтобы Flask получил запрос.

from flask import Flask

app = Flask(__name__)

server = app.config['SERVER_NAME'] = 'example.com:5000'

@app.route('/', subdomain="<subdomain>")
@app.route('/')
def index(subdomain=None):

    return ("index")

@app.route('/book/<book_id>/', subdomain="<subdomain>")
@app.route('/book/<book_id>/')
def posts(post_id, subdomain=None):

    return (book_id)


if __name__ == '__main__':
    app.run(host='example.com', debug=True)

1 ответ

Я не уверен, что это возможно. сопоставление хоста и сопоставление поддоменов являются взаимоисключающими (посмотрите на параметр сопоставления хоста).

Я бы хотел быть неправым.

Один из способов обойти эту проблему, о котором я могу подумать, - это использовать что-то перед Flask (скажем, nginx), которое указывает custom.com в custom.com._custom.example.com или что-то типа того. В своем коде вы можете создать кастом url_for функция, которая распознает это как пользовательский домен. Я бы спросил в списке рассылки Flask, чтобы они могли дать вам исчерпывающий ответ.

Другие вопросы по тегам