gpt4 book ai didi

.htaccess - 让 Flask 在 mod-rewrite 后面使用所需的 URL

转载 作者:行者123 更新时间:2023-12-03 16:40:44 28 4
gpt4 key购买 nike

我有一个在 Apache 上的 mod_wsgi 下运行的 Flask 应用程序。由于网站的各个部分是静态的,而其他部分是动态的,因此使用 mod_rewrite 将网站的动态部分路由到 Flask 应用程序,如下所示:

.htaccess

RewriteEngine on
RewriteBase /

RewriteRule ^(foo(/.*)?)$ /myapp.wsgi/$1 [L,QSA]
RewriteRule ^(bar(/.*)?)$ /myapp.wsgi/$1 [L,QSA]
# etc.

myapp.wsgi

from flask import Flask, request

application = Flask(__name__)

@application.route("/foo/")
def foo():
return request.url

@application.route("/bar/")
def bar():
return redirect(request.url + "baz/")

当我访问 http://www.mywebsite.com/foo/ 时,页面告诉我我的 URL 是 http://www.mywebsite.com/myapp.wsgi/foo/.

当我访问 http://www.mywebsite.com/bar/ 时,页面将我重定向到 http://www.mywebsite.com/myapp.wsgi/bar/baz/

这也发生在 Flask 的自动重定向中:当我访问 http://www.mywebsite.com/foo(没有尾部斜杠)时,Flask 重定向以添加斜杠,但它重定向到 http://www.mywebsite.com/myapp.wsgi/foo/

有没有一种简单的方法可以让 Flask 应用程序不在 URL 中包含 /myapp.wsgi 而是只使用相对于路由位置的 URL? (例如 /foo//bar/)

最佳答案

这可以通过使用一些中间件从 SCRIPT_NAME 环境变量中删除脚本的名称来解决,如下例取自 Flask docs .

from yourapplication import app

class ScriptNameStripper(object):
def __init__(self, app):
self.app = app

def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = ''
return self.app(environ, start_response)

app = ScriptNameStripper(app)

关于.htaccess - 让 Flask 在 mod-rewrite 后面使用所需的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27271444/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com