缺少尾随斜杠的URL不会在CherryPy中重定向

时间:2013-01-23 06:53:40

标签: python cherrypy static-files trailing-slash

我在使用CherryPy处理静态文件时遇到了困难。问题与URL的尾部斜杠的处理有关。有时会添加缺少的斜杠,有时则不会:行为不可预测。我确信那里潜藏着一个小虫。当我添加或删除一些静态文件时,该错误似乎出现了。看起来可能有一个未初始化的变量在处理斜杠的函数中创建一个未确定的状态。我已经整理了一个展示问题的最小应用程序(至少在我的机器中)。我在Ubuntu 12.10下使用CherryPy 3.2.2。

import cherrypy

class Root(object): pass

conf = {
    '/':{
    'tools.staticdir.on': True,
    'tools.staticdir.dir': '/home/bob/www',
    'tools.staticdir.index': 'index.htm',
    'tools.staticdir.debug': True,
    },
}

cherrypy.tree.mount(Root(), '/', config=conf)
cherrypy.engine.start()
cherrypy.engine.block()

我的实验性静态文件夹(/ home / bob / www)结构非常简单:

/home/bob/www/index.htm         <-- This file is just <html><body>Hello</body></html>
/home/bob/www/dir/index.htm     <-- This files includes a <img src="picture.jpg"> tag in it
/home/bob/www/dir/picture.jpg   <-- Any picture will do

如果我浏览 localhost:8080 / dir / ,结果页面会显示图像。
如果我浏览 localhost:8080 / dir ,结果页面显示图像。

任何帮助将不胜感激。也许我没有正确配置应用程序,因为我是CherryPy的新手。

谢谢,
鲍勃

P.S。我已经读过stackoverflow.com/questions/10276060,它有类似的问题,但使用路由。我不使用路线。

1 个答案:

答案 0 :(得分:0)

临时解决方案

此处显示的临时解决方案需要一个CherryPy源文件的小补丁。我要感谢Felix Bonkoski,他告诉我这件事。我做了一些谷歌搜索,并在bitbucket.org/cherrypy/cherrypy/issue/895 /.

找到了对它的引用。

以下是说明:

找到并编辑static.py文件(在我的Ubuntu机器中,它位于/usr/local/lib/python2.7/dist-packages/cherrypy/lib/static.py)。在函数staticdir()中,找到下面的行。它们就在这个功能的最后。

 if handled:
    request.is_index = filename[-1] in (r"\/")   <--- Line in question

编辑有问题的行,使其如下所示:

 if handled:
    request.is_index = True

并保存文件。

此时我重新启动了计算机,CherryPy正在运行,因为我认为它应该可以正常工作。