Html Tornado静态文件路由

Html Tornado静态文件路由,html,css,resources,tornado,Html,Css,Resources,Tornado,我正在尝试准备一个默认错误页。在我使用的error.html文件中: <link href="css/bootstrap.min.css" rel="stylesheet"> 假设我键入http://localhost:8888/apiurl。一切正常,css文件加载正确,错误页面呈现正常。但是,当我键入http://localhost:8888/api/foo找不到css文件 在第一种情况下,css请求http://localhost:8888/css/bootstrap.min

我正在尝试准备一个默认错误页。在我使用的
error.html
文件中:

<link href="css/bootstrap.min.css" rel="stylesheet">
假设我键入
http://localhost:8888/api
url。一切正常,css文件加载正确,错误页面呈现正常。但是,当我键入
http://localhost:8888/api/foo
找不到css文件

在第一种情况下,css请求
http://localhost:8888/css/bootstrap.min.css处理程序正确处理了
。在第二种方法中,对css的请求被转换为
http://localhost:8888/api/css/bootstrap.min.css
这是未处理的

我希望在这两种情况下都能找到资源,以便正确显示错误页面。我可以使用:

(r'.*/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'}

不过这次我可以在浏览器中输入
http://localhost:8888/api/asdasdsadsad/css/bootstrap.min.css
url和css文件被显示,而我认为应该显示错误页面。如何解决此问题?

这是因为您使用相对路径。有两种常见的方法可以解决此问题:

  • 使用绝对URL。在任何资源之前添加
    /
    (斜杠),因此使用

  • 添加到
    部分的页面

    基地。。。指定用于文档中包含的所有相对URL的基本URL

  • 并让处理程序保持原样

    (r'/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'})
    

    后者之所以有效,是因为它的正则表达式非常广泛,正如您所注意到的,它处理的请求应该是
    404
    。最好的做法是让路线尽可能具体。

    我以前尝试过您的第一个解决方案,但它没有;它不起作用,但现在起作用了。谢谢你的帮助和第二个例子,这对我来说是新的东西。
    (r'/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'})