无法使用 Cherrypy 禁用或删除 favicon.ico

Can't disable or remove favicon.ico with Cherrypy

我在将默认的 cherrypy favicon 更改为我自己的时遇到问题,名为 book.ico,位于 public/images/books.ico。我已经尝试使用以下代码禁用它:

    '/favicon.ico': {
            'tools.staticfile.on': False,
       }

但该图标仍显示为选项卡标签。我正在使用 chrome 以隐身模式浏览网站。

import cherrypy
import os
import glob


class HelloWorld(object):
    favicon_ico = None
    @cherrypy.expose
    def index(self):
        return file('public/html/index.html')

...跳过 def generate(self, name)

if __name__ == '__main__':
    cherrypy.config.update({

    'server.socket_host': 
            '192.168.2.9','server.socket_port':8080, 
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.getcwd(),
    },
    '/public': {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': os.path.join(os.getcwd(), "/public"),
        },
    '/favicon.ico': {
            'tools.staticfile.on': True,
            'tools.staticfile.filename': os.path.join(os.getcwd(), '/public/images/books.ico')
    }
    })
    cherrypy.tree.mount(HelloWorld())
    cherrypy.engine.start()
    cherrypy.engine.block()

目录结构

.
├── app.conf
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate_this.py
│   ├── cherryd
│   ├── easy_install
│   ├── easy_install-2.7
│   ├── pip
│   ├── pip2
│   ├── pip2.7
│   ├── python
│   ├── python2 -> python
│   └── python2.7 -> python
├── books.ico
├── CherrypyProd.py
├── images
├── pip-selfcheck.json
├── public
│   ├── css
│   ├── html
│   │   ├── books.png
│   │   └── index.html
│   └── images
│       ├── books.ico
│       └── books.png
├── ssl
├── static
    └── books.png

如何用我自己的 books.ico 替换默认的 favicon.ico???

提前感谢您的帮助。如果我能进一步澄清,请告诉我。

虽然有点知名但很烦人favicon cache issue

自 HTML 4.01 以来,W3C recommends 使用 link 标签而不是依赖 /favicon.ico。它允许您避免为网站图标制作异常路由,并使用 JPEG 和 PNG 等普通图像格式。它还允许公司缓存失效在查询字符串中提供版本。

<link rel="icon" type="image/png" href="/static/myicon.png?v=1">

为确保您的配置正确并且这是浏览器缓存问题,请对文件和 CherryPy 响应进行校验和。

cat books.ico | md5sum
wget -qO- http://192.168.2.9:8080/favicon.ico | md5sum

附带建议,不要依赖os.getcwd,因为很容易忘记事先设置当前目录的假设。最好设置 path = os.path.abspath(os.path.dirname(__file__)) 以后再用。

按照旧版 CherryPy 文档的建议,在您的根 class 中尝试 "favicon_ico" 处理程序方法:https://cherrypy.readthedocs.org/en/3.2.6/progguide/files/favicon.html