Я работаю над приложением GAE, которое в основном состоит из статического контента. Я настроил следующие обработчики:
- url: /content/(.*\..*)
static_files: static/content/\1
upload: static/content/(.*)
- url: /content/(.+)
static_files: static/content/\1.html
upload: static/content/(.*)\.html
Первый обработчик используется для обслуживания изображений, таблиц стилей и т. Д .; второй обрабатывает простые URL-адреса, такие как /content/zoo/monkeys/george
, и обслуживает соответствующий HTML-файл.
Прямо сейчас GAE возвращает пустую страницу, если для URL-адреса нет соответствующего статического файла. Я хотел бы настроить для этих случаев специальную страницу 404, но, видимо, это непросто.
В ответах на аналогичные вопросы предлагалось разместить в нижней части моего app.yaml
универсальный обработчик с RequestHandler
, который генерирует страницу с ошибкой. Однако /content/(.+)
соответствует всем URL-адресам в /content/
, действительным или недействительным, что означает, что такой обработчик не будет вызван.
Я могу думать только о двух других решениях:
- Направляйте все запросы через динамический обработчик, который записывает контент для действительных URL-адресов или страницу ошибок для недопустимых. Мне это не нравится, потому что это гораздо менее эффективно, чем позволить GAE обслуживать статические файлы.
- Объявите отдельный статический обработчик, который явно соответствует каждому статическому файлу, а затем поместите обработчик "улова всех" внизу - мне это тоже не нравится, потому что это приведет к длинному списку обработчиков.
Есть ли другой способ настроить правильную страницу 404 для этого случая?