【问题标题】:Redirect 404s to the index page if they are not under /api如果它们不在 /api 下,则将 404 重定向到索引页面
【发布时间】:2015-08-05 15:55:52
【问题描述】:

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

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>

【问题讨论】:

  • 您是指任何可能的请求,包括 404,还是您希望用户拥有的几个 url?
  • 任何不是/api/something或我的静态文件的请求,但目前我专注于/api

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


【解决方案1】:

为 404 创建一个错误处理程序,如果路径不以“/api”开头,它将返回重定向而不是 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'))

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 2016-08-16
    • 2023-04-09
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多