我正在使用 Tornado 托管一个 React SPA,该 SPA 使用 React Router 进行客户端路由。
一切正常,直到我刷新浏览器中由 React Router 处理的路径(例如
/foo/bar
),这会导致 404。如何将这些路径重定向到主 index.html
,以便 React Router 可以处理它们?
我尝试使用 Tornado 内置的 StaticFileHandler 和 RedirectHandler 来做到这一点,但无法让它工作。
我设法通过子类化
StaticFileHandler
并将所有请求转发到 index.html
来使客户端路由与 Tornado 一起使用:
class IndexFileHandler(StaticFileHandler):
def get(self, path: str, include_body: bool = True):
return super().get('index.html', include_body)
然后将此处理程序作为包罗万象的处理程序包含在内:
self.app = tornado.web.Application([
...
(r"/(.*)", IndexFileHandler, {"path": static_path, "default_filename": "index.html"}),
])