cherrypy serve index.html 在根目录(但不是其他文件)

cherrypy serve index.html at root (but not other files)

使用 cherrypy,我可以使用以下配置信息提供静态 index.html 文件:

location = os.path.dirname(os.path.realpath(__file__))
conf = {
     '/': {
         'tools.staticdir.on': True,
         'tools.staticdir.dir': '',
         'tools.staticdir.root': location,
         'tools.staticdir.index': 'index.html'
     }
}
cherrypy.tree.mount(Root(), '/', conf)
cherrypy.engine.start()
cherrypy.engine.block()

但是,在这样做的过程中,我似乎也在公开我在网络根目录中的所有文件。例如,人们还可以下载 server.py(其中包含我的 cherrypy 代码)。

有办法解决这个问题吗?我知道有些人会尝试通过 http://www.example.com/index.html and I don't want them to 404 each time, since cherrypy will only allow them to go to http://www.example.com or http://www.example.com/index 访问我的网站,这对我来说似乎是个问题。

当务之急是分离静态内容的代码。例如,创建一个 'static' 目录,如图所示。

至于index.html,它是否应该是'/'的别名,您可以创建方法,在出现'.'时替换它们的名称。 .通过“_”,如此处解释:cherrypy: respond to url that includes a dot?

一个例子:

#!/usr/bin/env python

import os.path
import cherrypy

class Root:
    @cherrypy.expose
    def index(self):
        return "bla"

    index_shtml = index_html = index_htm = index_php = index

location = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'static')

conf = {
     '/': {
         'tools.staticdir.on': True,
         'tools.staticdir.dir': '',
         'tools.staticdir.root': location,
     }
}

cherrypy.tree.mount(Root(), '/', conf)

cherrypy.engine.start()
cherrypy.engine.block()