【问题标题】:app.yaml : wildcard in URL with static_dir?app.yaml : 带有 static_dir 的 URL 中的通配符?
【发布时间】:2014-01-29 22:06:37
【问题描述】:

我在 app.yaml 中将正则表达式匹配为目录名称的尝试不起作用:

- url: /v1_.*
  static_dir: static/v1
  expiration: "364d"

虽然this official spec 表示支持正则表达式语法。有没有办法让这个工作?

即/v1_2014-01-29/img/logo.png 应该与静态文件 /static/v1/img/logo.png 匹配。

琐事

我使用 Google App Engine 来提供 Go 网络应用程序。

我想最大限度地延长浏览器缓存的寿命,最大限度地减少请求数量,并且仍然提供我的 css/js/png 的新版本,我相信 revving filenames 是实现这一目标的最佳实践。此外,由于添加变量查询字符串 (/v1/img/logo.png?2014-01-29) 可能会导致代理和缓存问题,我更喜欢显示变量目录名称 (/v1_2014-01-29/img/logo.png),指向同一个底层服务器目录。

【问题讨论】:

    标签: google-app-engine go frontend


    【解决方案1】:

    在我看来,超出 url 定义匹配(从一开始就匹配)的 URL 的任何部分都将附加到 static_dir。

    所以如果文件路径是static/v1/img/logo.png(用Python试过),那么下面的处理程序应该匹配/v1_2014-01-29/img/logo.png:

    - url: /v1_(\d+-?)+
      static_dir: static/v1
    

    【讨论】:

    • 你是对的,问题肯定是.* 也匹配空字符串,所以/v1_2014-01-29/img/logo.png 实际上一定是在寻找/static/v1/2014-01-29/img/logo.png。您能解释一下(\d+-?)+ 的工作原理吗?我将添加另一个简单的答案以供将来参考(无意冒犯)。
    • (\d+-?)+ 部分与 URL 中的日期匹配。基本上它是\d{4}-\d{2}-\d{2} 的一个(不完全等价的)快捷方式。我相信v1_.*_ 也适用于v1_YYYY-MM-DD_ 格式的URL,因为它会查找以v1_ 开头的任何内容,然后是中间的任何内容,然后是下划线。我相信 URL 的其余部分 (/img/logo.png) 会被附加到 static_dir 以查找资源。
    【解决方案2】:

    在 olivierdm 的回答之后,我将 yaml 更改为:

    - url: /v1_.*_
      static_dir: static/v1
      expiration: "364d"
    

    和我的 html 模板来生成 /v1_2014-01-29_/img/logo.png。

    基本上,额外的任意字符下划线_ 强制.* 匹配2014-01-29,而不是空字符串。

    现在每次我希望访问者重新加载静态文件时,我只需更改模板中的日期(我不再触摸 app.yaml)。此外,对“过时”网址的任何意外请求仍会成功并提供新资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 2012-05-10
      • 2016-06-05
      • 2012-10-28
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多