我在heroku上托管的Angular + Flask中编写了一个应用程序。我一直在寻找使用html5mode来使用myapp.co/register
作为oauth。 html5mode的问题是,如果有人刷新页面或单击非root用户的链接,服务器需要重写url。我尝试使用this代码段来捕获它们,但它不起作用。
@app.route("/", defaults={"path": ""})
@app.route("/<path:path>")
def index(path):
print path
return make_response(open(app.static_folder + "index.html").read())
输出404
* Restarting with reloader
127.0.0.1 - - [23/Jan/2014 13:41:48] "GET /ass HTTP/1.1" 404 -
应用程序获得root服务器index.html和/ api / v1 /即RESTful api
答案 0 :(得分:7)
你需要使用比你更多的东西:
@app.route("/", defaults={"path": ""})
@app.route("/<string:path>") <--- this is missing
@app.route("/<path:path>")
def index(path):
print path
return make_response(open(app.static_folder + "index.html").read())
所以:
@app.route("/<string:path>")
缺少。它会捕获字符串变量(而不是路径),因此在您的情况下,只有ass
来自您的示例,当您尝试点击http://localhost:5000/ass时。
答案 1 :(得分:6)
如果您没有更多优先级更高的路由,您的代码将捕获所有网址。但看起来它应该返回500
错误(因为我希望你没有<app_path>/staticindex.html
并使用不安全的方法来发送文件)。
因此,如果您有其他规则,则必须查看规则优先级(请参阅https://stackoverflow.com/a/17146563/880326)。
如果您对此路线有错误,请更好地使用:
@app.route("/", defaults={"path": ""})
@app.route("/<path:path>")
def index(path)
return send_from_directory(app.static_folder, "index.html")