Ответ зависит от того, как вы обслуживаете это приложение.
Предполагая, что вы собираетесь запускать это приложение внутри контейнера WSGI (mod_wsgi, uwsgi, gunicorn и т. д.); вам нужно на самом деле монтировать в этом префиксе приложение как часть этого контейнера WSGI (что-нибудь, что говорит WSGI) и установить настройку APPLICATION_ROOT
значение для вашего префикса:
app.config["APPLICATION_ROOT"] = "/abc/123"
@app.route("/")
def index():
return "The URL for this page is {}".format(url_for("index"))
# Will return "The URL for this page is /abc/123/"
Установка значения конфигурации APPLICATION_ROOT
просто ограничивает файл cookie сеанса флешки этим префиксом URL.
Если вы не знаете, что означает первый абзац, это означает, что все остальные будут автоматически обработаны для вас превосходными возможностями WSGI для Flask и Werkzeug. , посмотрите на это примерное приложение с Flask, смонтированным внутри него:
from flask import Flask, url_for
from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware
app = Flask(__name__)
app.config['APPLICATION_ROOT'] = '/abc/123'
@app.route('/')
def index():
return 'The URL for this page is {}'.format(url_for('index'))
def simple(env, resp):
resp(b'200 OK', [(b'Content-Type', b'text/plain')])
return [b'Hello WSGI World']
app.wsgi_app = DispatcherMiddleware(simple, {'/abc/123': app.wsgi_app})
if __name__ == '__main__':
app.run('localhost', 5000)
Если, с другой стороны, вы будете запускать свою флягу приложение в корневом контейнере WSGI и запросы проксирования к нему (например, если это FastCGI'd, или если nginx является proxy_pass
-потребителями запросов для вспомогательной точки к вашему автономному uwsgi
/ gevent
, вы можете либо:
DispatcherMiddleware
из werkzeug
(или PrefixMiddleware
из ответа su27 ), чтобы подключить ваше приложение на автономном сервере WSGI, который вы используете. (См. Пример правильной подстройки вашего приложения выше для используемого кода.) Просто поместите символ x
и пробел в не захватывающую группу и сделайте его необязательным, используя квантификатор ?
:
^(?:x )?\(([A-Z])\)
В качестве альтернативы, вы все еще можете использовать оператор |
, но иметь только одну группу захвата, если вы используете положительный Lookbehind :
(?<=^x |^)\(([A-Z])\)
Вы даже можете сделать еще один шаг вперед и полностью избавиться от группы захвата и просто использовать заглавную букву в качестве всего совпадения, если хотите:
(?<=^x \(|^\()[A-Z](?=\))
1117 Хотя это было бы излишним. Я бы пошел с первым решением.