【问题标题】:GAE how to serve 404 pagesGAE 如何提供 404 页面
【发布时间】:2020-11-12 17:54:19
【问题描述】:

我的应用引擎有一个带有一些静态页面的应用。

我想提供我的静态内容和脚本。最后,我想为其他一切服务 404。

我的 app.yaml 文件看起来像

runtime: go113

handlers:
- url: /myscripy
  script: auto

- url: /$
  static_files: public/index.html
  secure: always
  upload: public/index.html

- url: /(.*/)?$
  static_files: public/\1index.html
  secure: always
  upload: public/(.*/)?index.html
  http_headers:
    Strict-Transport-Security: max-age=31536000; includeSubDomains
    X-Frame-Options: SAMEORIGIN

好的,除了一些事情之外,它可以工作

  1. 我不清楚为什么- url: /$ 是必要的,为什么它不被- url: /(.*/)?$ 包含,但这只是一个旁注。

  2. 主要问题:任何不匹配的 URL 都将呈现为具有 200 状态代码而不是 404 的空文件。

  3. 我可以通过添加类似的东西来强制 404s

- url: /.*
  static_files: public/some_non_existing_file.html
  secure: always
  upload: public/some_non_existing_file.html

在 app.yaml 文件的末尾,但这会触发一个丑陋的 404 最后一页,这不是很吸引人。

  1. 我可以提供漂亮的 404 自定义页面,例如
- url: /.*
  secure: always
  static_files: public/404.html
  upload: public/404.html
  http_headers:
    Status: 404

其中 public/404.html 存在,但是 Status: 200 标头在 Status: 404 标头之前发送,使整个响应为 200。

  1. 我有希望
error_handlers:
  - file: 404.html

为我做点什么,但不,它似乎什么都不做。

  1. 我当然可以添加自定义脚本来创建 404 响应,但我觉得有点傻。难道没有更好的办法吗?

我有点难过 - 我不敢相信像 GAE 这样长期存在的行业工具无法静态定义自定义 404 页面,甚至无法为不存在的页面呈现 404 状态代码。

非常感谢任何建议,在此先感谢!

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    确实,没有更简单的方法来实现自定义404 页面,然后添加自定义脚本来创建404 响应。不幸的是,App Engine 仍然不能很好地处理一些错误,其中包括错误404。正如您可以查看此官方文档here,Java 上没有来自此错误的自定义处理程序。

    这只是一个示例,说明自定义脚本是可行的解决方案。否则,解决方案将不会返回错误 404 - 正如您所提到的 - 或者您需要使用包罗万象的处理程序,即也不太推荐,因为它的解决方案太宽泛了。

    如果你使用 Python,有一个很好的例子来说明如何配置触发器和脚本示例here

    如果这些信息对您有帮助,请告诉我!

    【讨论】:

    • 谢谢,加布里埃尔。我也这么认为,但我仍然无法相信默认设置是将不存在的页面作为空的 200 状态页面提供服务。真是太……轻率了,因为没有更好的词了。我将暂缓将问题标记为已明确回答——我仍然希望 GAE 团队的某个人能够给出一个非常好的解释。
    • 顺便说一句 - 为什么我觉得这很轻率:网上有很多文章建议使用 GAE 来托管静态网站。对于不存在的页面没有有效的 404 似乎对于网络爬虫应该获取的任何内容都不是首发。为什么没有人指出这一点?
    • 当然,我明白你的意思@KlapauciusKlapaucius ,也许在Google's Issue Tracker 中打开一个功能请求是值得的,这样他们就可以检查将来实现此功能的可能性。
    猜你喜欢
    • 1970-01-01
    • 2016-12-13
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2012-12-14
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多