1

我对 GAE 比较陌生,并且在理解 URL 映射时遇到了一些困难。

我有一组静态数据(HTML 模板、登录表单、js 等)和一个动态部分。

我当前的 app.yaml 如下:

handlers:
- url: /.*
  static_dir: /static
- url: /service/.*
  script: _go_app
  login: required

这里的想法是http://myapp/service/foo路由到应用程序,并且其他任何东西都http://myapp/foo.html应该服务/static/foo.html。但是,我在静态请求中收到 404 错误。

想法?

4

3 回答 3

4

根据文件

url:URL 前缀。此值使用正则表达式语法(因此必须对正则表达式特殊字符进行转义),但不应包含分组。以该前缀开头的所有 URL 都由该处理程序处理,使用前缀之后的 URL 部分作为文件路径的一部分。

在您的情况下,由于您指定url: /.*,前缀将为foo.html,并且要获取的文件将具有空文件名。

此外,处理程序是从上到下评估的,因此您需要更改顺序。

handlers:
- url: /service/.*
  script: _go_app
  login: required
- url: /
  static_dir: static
于 2012-09-06T17:59:16.227 回答
2

顺序很重要,因此您的 /service/ 处理程序可能永远不会被调用,除非您将其移动到静态处理程序之上。此外,404 是由静态声明中的不正确语法引起的。将您的处理程序更改为:

handlers:
- url: /service/.*
  script: _go_app
  login: required
- url: /
  static_dir: static
于 2012-09-06T17:52:47.810 回答
-1

static_dir 指令按与给定正则表达式匹配的前缀后的名称提供文件。如果 RE 以 结尾.*,则整个 URL 将被视为前缀,因此不会有任何剩余可用作文件路径。

试试url: /吧。

此外,处理程序按顺序匹配。

正则表达式/.*匹配您可以接收请求的所有 URL,因此它之后的任何内容都不会匹配。放在最后。

于 2012-09-06T17:47:42.993 回答