处理app.yaml配置中的favicon
是否有必要像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”这样的字符串。虽然这种情况很少会造成实际问题,但为了安全起见,转义任何字面字符是个好习惯。