【问题标题】:Google App Engine handler won't work unless a catch all handler is set除非设置了全部捕获处理程序,否则 Google App Engine 处理程序将不起作用
【发布时间】:2018-08-17 20:53:32
【问题描述】:

我正在努力在我的app.yaml 文件的handlers 部分为我的标准引擎php 应用程序设置URL 处理程序。

以下代码使mydomain.com/abc.phpmydomain.com 在我的dist 文件夹中显示abc.php 文件:

handlers:
- url: /(abc\.php)
  script: dist/abc.php

- url: /(.*)
  script: dist/abc.php

但是,我不想要一个 catch all 处理程序,所以我删除了它,所以只存在 1 个处理程序:

handlers:
- url: /(abc\.php)
  script: dist/abc.php

现在当我转到 mydomain.com/abc.php 时,我收到 500 错误:

如何在不对所有 URL 使用处理程序的情况下使目标 URL 在 GAE 上工作?

【问题讨论】:

  • 您在日志中看到的错误是什么?
  • 我查看了 StackDriver Logging 但我只能看到对 /_ah/start + 一些 createVersion 日志的请求 - 没有关于 php 错误的详细信息。关于如何查看 PHP 错误的任何建议?
  • 来自the docs,它说模式是从上到下评估的。您最初有 URL 模式 A 和 URL 模式 B。当只有 A 时,它不起作用。我会说您的请求是通过模式 B 处理的; A 失败,他们转移到 B。我还不确定为什么......从以前的文档中,你缺少 $end anchor
  • 我创建了 2 个单独的项目以确保旧的处理程序不会被重用/缓存,所以我认为这不是问题所在。我已经按照您的建议设置了第三个项目:handlers:- url: /abc.php$script: dist/abc.php 这也会导致与以前相同的 500 错误。
  • 我拿了simplest code 并复制了你的处理程序。它有效。此外,如果我没有捕获所有处理程序,当我点击错误的 URL 时,我会得到 404(不是 5XX)。我能想到的一个区别是我缺少的自定义域。此外,关于日志,您应该能够同时看到 activityrequest_log。如果未记录任何请求,则意味着请求未解决并定向到您的应用程序。尝试不使用自定义域,以消除一个因素。

标签: google-app-engine handler app.yaml google-app-engine-php


【解决方案1】:

我的 app.yaml 文件包含资源:

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 1
  disk_size_gb: 10

由于 App Engine 标准环境不支持此功能,只需注释掉此代码即可解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2020-03-19
    • 2015-05-29
    相关资源
    最近更新 更多