繁体   English   中英

Python http.server - 如何从 cwd 上方的目录服务 HTML

[英]Python http.server - how to serve HTML from directory above cwd

我有一个问题,我真的可以使用一些指导。 我只是想从与服务器本身不同的目录中提供 HTML 。 理想情况下,我想将服务器目录上移一层,并提供位于那里的文件。

当我尝试这样做时,我得到了 404。

class Server(SimpleHTTPRequestHandler):

    def do_GET(self):
        ... some other stuff ...        
        elif self.path == "/manage":
            self.send_response(200)
            self.path = "/manage.html"
            return SimpleHTTPRequestHandler.do_GET(self)
        else:            
            f = self.send_head()
            if f:
                try:
                    self.copyfile(f, self.wfile)
                finally:
                    f.close()

^此代码提供文件,如果它与服务器位于同一目录中。

如果我然后将 manage.html 向上移动(我希望它存在的地方),并尝试诸如“../manage.html”之类的东西或绝对路径,我会得到 404。

我是否遇到了一些内置的目录遍历缓解措施? 如果是这样,有没有办法可以禁用它? 所有这些都是本地的,安全性并不是真正的问题。 我可以尝试一个子目录,但如果我从那条路开始,我必须重命名和重新排列整个目录结构,因为命名没有意义。

提前致谢。 (Python 3.10,2) 64 位。 视窗。

这是一项安全功能。 您不希望用户能够看到 web 服务器的所有文件,对吗?

从 Python 3.7 开始, SimpleHTTPRequestHandler的构造函数有一个directory参数(参见文档: https://docs.Z23EEEB4347BDDhttp26BFC6B7EE9A3B755DDZ.org/3/libr

有了它,您可以告诉SimpleHTTPRequestHandler从哪里服务器文件。 您可以在实例化服务器的任何位置进行更改,即Server(directory=...)或者您可以更改服务器 class 的 init 方法

class Server(SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=..., **kwargs)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM