处理app.yaml配置中的favicon

1 投票
3 回答
3524 浏览
提问于 2025-04-18 11:24

是否有必要像Google Developers Cloud Playground那样单独处理favicon.ico这个文件呢?

- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

如果需要,那为什么不这样做呢:

- url: /favicon.ico
  static_files: favicon.ico
  upload: favicon.ico


在我的真实app.yaml文件中,我并没有单独处理favicon.ico,但它似乎运行得很好:

application: myAppName
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /
  static_files: website/index.html
  upload: website/index.html

- url: /
  static_dir: website

website文件夹里,我有以下内容:

  • images_folder
  • favicon.ico
  • index.html

3 个回答

0

其实,不需要在 app.yaml 文件里专门为 favicon.ico 处理请求。这样做只是个约定,因为 favicon 通常是最常被请求的图标,而且现代浏览器默认会请求这个图标。

你可以用一个通用的处理器来处理所有 .ico 文件,但因为 favicon.ico 在浏览器默认请求中有点特殊,所以通常会使用一个独特的处理器来处理它。

0

看起来你想要搭建一个静态网站。我会使用:

application: myAppName
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /images
  static_dir: website/images_folder/

- url: /.+     # this should handle the favicon.ico, but see below
  static_dir: website/

- url: /
  static_files: website/index.html
  upload: website/index.html

不过,我更喜欢明确地指定网站图标的处理方式:

- url: /favicon.ico
  static_files: favicon.ico
  upload: favicon.ico

其实,我会把网站图标放在图片文件夹里,这样开发环境会更整洁,但这又是另一个话题了。

1

这里我们只讨论你问题中的一个具体部分,也就是你问为什么不去掉favicon.ico中的反斜杠。其实,网址的配置是用正则表达式来写的(你可以在这里查看)。你看到反斜杠的原因是,在正则表达式中,“.”代表任何字符。虽然这样写仍然有效,但如果你直接写一个“.”,它会匹配任何字符。反斜杠的作用是“转义”这个“.”,让它变成字面上的“.”,而不是代表任何字符。如果没有反斜杠,它可能会匹配到像“faviconaico”这样的字符串。虽然这种情况很少会造成实际问题,但为了安全起见,转义任何字面字符是个好习惯。

撰写回答