【问题标题】:app.yaml url configs for google app engine谷歌应用引擎的 app.yaml url 配置
【发布时间】:2012-09-06 17:45:49
【问题描述】:

我对 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 错误。

想法?

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    根据documentation

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        改用url: /

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

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

        【讨论】:

        • 我根据此建议进行了更改,但现在出现了不同的错误。它仍然是 404,但日志显示:[Errno 2] No such file or directory: '\\static\\foo.html' 我尝试将“静态”目录放在根目录 <project>/static 以及应用脚本位于 <project>/hello/static 的位置。不确定项目在哪里生根......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2019-06-10
        • 2011-10-02
        • 2015-01-01
        • 2012-03-08
        • 1970-01-01
        • 2015-05-30
        相关资源
        最近更新 更多