Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 让Flask在mod rewrite之后使用所需的URL_.htaccess_Url_Mod Rewrite_Flask_Mod Wsgi - Fatal编程技术网

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

.htaccess 让Flask在mod rewrite之后使用所需的URL,.htaccess,url,mod-rewrite,flask,mod-wsgi,.htaccess,Url,Mod Rewrite,Flask,Mod Wsgi,我有一个Flask应用程序在Apache上的mod_wsgi下运行。由于网站的各个部分是静态的,而其他部分是动态的,因此使用mod_rewrite将网站的动态部分路由到Flask应用程序,如下所示: .htaccess RewriteEngine on RewriteBase / RewriteRule ^(foo(/.*)?)$ /myapp.wsgi/$1 [L,QSA] RewriteRule ^(bar(/.*)?)$ /myapp.wsgi/$1 [L,QSA] #

我有一个Flask应用程序在Apache上的mod_wsgi下运行。由于网站的各个部分是静态的,而其他部分是动态的,因此使用
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/

我不知道自己是否理解得很好,但您可能希望使用
url\u实现此处记录的
函数:

它允许您通过引用应用程序的端点来构造URL。
例如('bar')的
url\u
将构造指向bar端点的相对url。

这可以通过使用一些中间件从
script\u name
环境变量中删除脚本名称来解决,如下例取自


这是一个选项,尽管当flask本身提供重定向时,这并没有帮助。e、 g.当URL缺少尾随斜杠时,Flask会自动重定向到带有尾随斜杠的URL。我已经用这个更新了这个问题。你可以通过使用
route
中的
strict\u slashes
参数来删除斜杠重定向行为,但我承认它并没有真正解决这个问题。您是否尝试过在配置中设置应用程序根目录
application.config.udpate(application\u ROOT=“myapp.wsgi”)
我已尝试将
application\u ROOT
设置为
myapp.wsgi
,但这似乎确保了当前的行为。我还尝试将其设置为
/
www.mywebsite.com
,以及将
SERVER\u NAME
设置为
www.mywebsite.com
,但都不起作用。
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)