Windows10下Apache部署mod_wsgi+Flask出现INET_E_REDIRECT_FAILED错误求助
故障原因分析
首先Apache日志返回的308状态码代表永久重定向,结合你的部署配置,错误触发原因来自3个层面:
- 路径导入错误:你的Flask实例
app定义在E:\www\test\app\__init__.py中,但test.wsgi中from test import app的导入逻辑找不到对应实例,应用初始化失败触发异常重定向 - Apache权限配置错误:
<Directory>块配置的授权路径是E:/www/test/,但test.wsgi存放在E:/www/目录下,Apache没有该文件的访问权限,请求处理异常 - 路由前缀不匹配:你将应用挂载到了
/test路径下,但Flask默认不知道该前缀,生成重定向地址时会缺失/test前缀,导致浏览器跳转地址错误,抛出INET_E_REDIRECT_FAILED
修复步骤
- 修正
test.wsgi导入逻辑
import sys # 把应用所在目录加入Python搜索路径 sys.path.insert(0, 'E:/www/test') sys.path.insert(0, 'E:/www') # 从app目录导入Flask实例 from app import app as application
- 修正Apache配置
WSGIScriptAlias /test "E:/www/test.wsgi" # 给wsgi文件所在目录授予访问权限 <Directory "E:/www"> WSGIApplicationGroup %{GLOBAL} AllowOverride None Require all granted </Directory> # 传递挂载前缀给Flask,避免重定向地址错误 SetEnv SCRIPT_NAME /test WSGIPassAuthorization On
- 可选:补充Flask应用配置,避免路由歧义
在__init__.py中添加挂载前缀配置:
app = Flask(__name__) app.debug = True # 新增以下配置 app.config['APPLICATION_ROOT'] = '/test' # 如需要关闭自动补全斜杠的重定向逻辑,可打开以下配置 # app.url_map.strict_slashes = False
验证方法
修改完成后重启Apache服务,访问http://你的服务地址/test或http://你的服务地址/test/index即可正常返回内容。如果仍有异常,查看Apache的error.log日志可定位具体报错信息。
内容的提问来源于stack exchange,提问作者stazzz
相关产品推荐
相关产品推荐

