Причина кода ошибки 404 HTTP заключается в следующих обработчиках:
- url:
static_dir: dist
Как указано в официальной документации Google App Engine , использование static_dir: dist
приводит к тому, что все URL-адресаначиная с шаблона /
, обрабатываются как пути к статическим файлам в каталоге /dist
, поэтому, например, каждый раз, когда вы вызываете URL /whatever
, приложение будет искать файл /dist/whatever
, поскольку он не существуетВы получаете ошибку 404.
Я полагаю, что следующий код будет работать так, как вы ожидаете:
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
static_files: dist/index.html
upload: dist/index.html
- url: /dist/index.html
static_files: dist/index.html
upload: dist/index.html
- url: /.*
script: main.app
skip_files:
- ^.*node_modules(/.*)?
- ^.*json_data(/.*)?
- ^.*e2e(/.*)?
Обработчик для конечной точки /
будет обслуживать файл dist/index.html
, а также /dist/index.html
endpoint.
Обработчики проверяются последовательно, и если ни один из вышеперечисленных обработчиков не был вызван, то любой URL, соответствующий шаблону /.*
(который является всеми из них), вызовет сценарий main.app (это будет в основномпереопределить сообщение об ошибке 404).
Этот скрипт перенаправляет вас на конечную точку /dist/index.html
, поэтому он и должен обрабатываться в файле yaml
.
В качестве конечной точки мне пришлось импортировать webapp2_extras.routes
, чтобы использовать RedirectRoute
в main.py.