我有一个由用户托管的CherryPy webapp。通常,主应用程序安装如下:
cherrypy.tree.mount(root,
'/',
root.conf
)
但是,为了让它在nginx之类的反向代理之后工作,它需要能够安装在其他地方,用户选择的任何路径:
mount = '/my_application'
cherrypy.tree.mount(root,
mount,
root.conf
)
mount可以是用户选择的任何内容。
现在的问题是链接破了。
raise cherrypy.HTTPRedirect("/news")
不再有效。当我需要重定向到地址时,它会重定向到地址:端口/新闻:port / my_application / news。
我可以通过为每个应用程序路径前缀的url创建一个条件:
if mount != '/':
url = mount + '/news'
raise cherrypy.HTTPRedirect(url)
但必须有更好的方法来做到这一点。我已经查看了Request Dispatching,但我无法动态地重新编写URL。
处理这种情况的最佳方法是什么?
答案 0 :(得分:1)
您可以使用辅助函数cherrypy.url
生成相对于script_name
(/my_application
)的网址。
你最终会得到类似的东西:
raise cherrypy.HTTPRedirect(cherrypy.url('/news'))
cherrypy.url
来源的链接:https://github.com/cherrypy/cherrypy/blob/master/cherrypy/_helper.py#L194