Как добавить пользовательскую страницу ошибки для ошибки 404 (страница не найдена)

Я пытаюсь добавить на свой веб-сайт настраиваемую страницу с ошибкой 404 для «Страница не найдена» или указать неправильный URL-адрес. У меня есть файл app.yaml, я использую язык Go. Мой веб-сайт в основном находится в Google App Engine. Я проверил каждый пример, который, как мне кажется, связан с моей проблемой переполнения стека. Но в каком-то примере они объяснили пример на языке Python или Java, но я хочу найти на языке Go. потому что мой код написан на Go.

Страница статической ошибки 404 загружается на сервер, но когда я ввел неправильный URL-адрес, вместо моей пользовательской страницы отображается страница с ошибкой, которая не найдена. Я приложил снимок экрана, который вам все расскажет.

current: - https://imgur.com/a/sGrSPyO "Это то, что показывает текущий"

Обязательно: - https://imgur.com/a/TxL7NMR «Это то, что я хочу»

Я прочитал документы app.yaml движка приложений Google и попытался установить обработчики ошибок, но не нашел никакого решения.

Код файла app.yaml

runtime: go
api_version: go1

handlers:

-url: /

  static_files: www/index.html

  upload: www/index.html

-url: /(.*)

  static_files: www/\1

  upload: www/(.*)

error_handlers: 

  -file: www/page-not-found.html* 

Вот обновленный файл app.yaml:

runtime: go

api_version: go1

error_handlers: 
  - file: /page-not-found.html

handlers:
- url: /
  static_files: www/index.html
  upload: www/index.html
- url: /(.*)
  static_files: www/\1
  upload: www/(.*)

person Saurabh Tripathi    schedule 19.07.2019    source источник


Ответы (1)


Документацию по app.yaml файлу конфигурации для приложений Go можно найти по адресу app.yaml Файл конфигурации.

Найдите error_handlers на этой странице, чтобы узнать, как это должно быть определено. Он имеет следующее красное предупреждение:

Предупреждение. Убедитесь, что путь к файлу ответа на ошибку не перекрывается с путями обработчика статических файлов.

Вы указали:

-file: www/page-not-found.html*

Это перекрывается с одним из ваших путей статического обработчика:

-url: /(.*)
 static_files: www/\1
 upload: www/(.*)

Вот почему ваша настраиваемая страница ошибок не обслуживается. Вы должны разместить свой обработчик ошибок за пределами папки www (или не использовать всю папку www в качестве пути статического обработчика, важно то, что они не могут перекрываться).

Примечание. Я связался с конфигурацией приложения Go 1.12, потому что Go 1.9, который вы используете, устарел и скоро станет недоступным. Тем не менее, то же самое относится к обеим версиям в отношении настраиваемых страниц ошибок.

person icza    schedule 19.07.2019
comment
@SaurabhTripathi Пожалуйста, опубликуйте свою улучшенную версию. - person icza; 19.07.2019
comment
icza. это улучшенная версия .. Я удалил page-not-found.html из папки www. и отредактируйте тег из файла app.yaml. но все еще не нашел решения. время выполнения: go api_version: go1 error_handlers: - file: /page-not-found.html handlers: - url: / static_files: www / index.html upload: www / index.html - url: /(.*) static_files: www / \ 1 загрузка: www /(.*) - person Saurabh Tripathi; 19.07.2019
comment
@SaurabhTripathi Пожалуйста, отредактируйте свой вопрос и добавьте новый app.yaml с другими деталями. По комментариям это тяжело читать. - person icza; 19.07.2019
comment
@SaurabhTripathi А где твой page-not-found.html файл? Вы уверены, что он загружен в AppEngine? - person icza; 19.07.2019
comment
@icza, вы уверены, что error_handlers можно использовать для ответа 404? То есть выполняет ли gae error_handlers при обнаружении ошибки 404? Я видел комментарии, указывающие на то, что это невозможно, и ответы, обычно предлагающие реализацию пользовательских 404 в коде, а не в конфигурации ... хотя я видел репозитории на github, которые указывают на шаблоны 404 в их конфигурации error_handlers, работает ли это так разработчики ожидают другого ... потом есть такие репозитории ... - person mkopriva; 19.07.2019
comment
когда я помещаю этот файл page-not-found.html вне папки www, тогда он не показывает, чтобы поместить www.accem.com/page-not-found.html... в противном случае, если я вставлю эту папку www, он будет перекрываться но отображается после прямой ссылки на этот pge. - person Saurabh Tripathi; 19.07.2019
comment
@icza это файлы в папке. в настоящее время .. C: \ Users \ Accemy Admin \ Accemy.com imgur.com/a/sPAybo3 после этого откроется папка www: imgur.com/a/B80GV66, пожалуйста, проверьте и дайте мне знать правильно. - person Saurabh Tripathi; 19.07.2019
comment
@mkopriva, так что вы хотите сказать, в GAE нет ничего, что могло бы предоставить мне настраиваемую службу страницы ошибок. - person Saurabh Tripathi; 19.07.2019
comment
@SaurabhTripathi то, что я хочу сказать, не имеет значения. Однако я я говорю, что мне кажется, что пользовательская обработка ошибок 404 невозможна в конфигурации app.yaml с параметром error_handlers. Но это возможно в коде и, следовательно, должно быть реализовано вашим приложением Go, а не вашим config. - person mkopriva; 19.07.2019
comment
@mkopriva, спасибо, но если это возможно в коде, как вы сказали. Не могли бы вы помочь мне реализовать это в приложении Go? - person Saurabh Tripathi; 19.07.2019
comment
@mkopriva Нет, я не пробовал это, если его можно использовать для переопределения ответов 404 ... - person icza; 19.07.2019
comment
@SaurabhTripathi Я не могу вам помочь, не увидев, как вы настроили код сервера Go, например, если вы используете сторонний маршрутизатор, как это делают многие люди, правильная реализация будет зависеть от этого маршрутизатора. Также уже есть много вопросов и ответов о том, как обрабатывать пользовательские ошибки 404 в Go, поэтому я предлагаю вам сначала взглянуть на существующие ответы, и если ни один из них не работает для вас, вы либо открываете новый вопрос, либо обновляете свой старый с примером кода вашего сервера Go. Начните здесь: stackoverflow.com/search?q=%5Bgo%5D+custom+404+handler - person mkopriva; 19.07.2019