如果404不在/ api下,则将404重定向到索引页面

时间:2015-08-05 15:55:52

标签: python apache mod-rewrite flask mod-wsgi

我想将任何不是api调用的请求重定向到index方法。所有api urls都以“/ api”开头。我应该使用mod_rewrite执行此操作还是Flask可以原生处理它?<​​/ p>

from flask import Flask

app = Flask(__name__, static_folder="public", static_url_path="")

@app.route("/", methods=["GET"])
def index():
    return render_template("index.html")

@app.route("/api/some_resources", methods=["GET"])
def get_all():
    pass
<VirtualHost *>
    ServerName example.com
    WSGIDaemonProcess my_app user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/my_app/my_app.wsgi

    <Directory /var/www/my_app>
        WSGIProcessGroup my_app
        WSGIApplicationGroup %{GLOBAL}
        WSGIScriptReloading On
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

1 个答案:

答案 0 :(得分:3)

为404创建错误处理程序,如果路径不以&#34; / api&#34;开头,则会返回重定向而不是404错误。这样,如果有人访问不存在的端点,api仍然可以404,但所有其他请求都路由到索引。

@app.errorhandler(404)
def handle_404(e):
    if request.path.startswith('/api'):
        return render_template('my_api_404.html'), 404
    else:
        return redirect(url_for('index'))