如何解决在子域上托管 Flask 应用程序在主域上托管 WordPress
我希望你能在以下方面提供帮助,因为我已经努力让它工作了很多天。
为了给您一些背景知识,我曾经在我的网站 domain.xyz 上托管了一个 Flask 应用程序。它托管在 namecheap 上并通过 CPanel Python 应用程序运行。 然后我决定在同一个站点上也有一个 wordpress,所以我不得不将烧瓶移动到子域 api.domain.xyz
现在,wordpress 站点可以正常工作,flask 应用程序的根页面 (api.domain.xyz) 也是如此。但是,烧瓶的所有其他路线都给了我相同的错误页面:
„ 未找到
在此服务器上找不到请求的 URL。
此外,在尝试使用 ErrorDocument 处理请求时遇到了 404 Not Found 错误。“
我使用 Namencheap 托管,并尝试了很多次支持,但他们坚持认为这是代码问题。我做错了什么?
这是python代码:
#main.py
from flask import Flask,jsonify,request,abort
import os
from flask import g
import time
import socket
app = Flask(__name__,subdomain_matching=True)
#app.config["APPLICATION_ROOT"] = "/api"
#app.config["DEBUG"] = True
@app.before_request
def before_request():
print("before request")
g.start = time.time()
@app.route('/test',subdomain="api",methods=['GET'])
def test():
return '''api'''
@app.route('/',methods=['GET'])
def home():
print("HOME")
return '''<p>This is the root page.</p>'''
@app.after_request
def after_request(response):
diff = time.time() - g.start
print ("Request time: " + str(diff))
if ((response.response) and
(200 <= response.status_code < 300) and
(response.content_type.startswith('text/html'))):
response.set_data(response.get_data().replace(
b'__EXECUTION_TIME__',bytes(str(diff),'utf-8')))
return response
if __name__ == '__main__':
app.run(host='api.domain.xyz',debug=True)
所以基本上,api.domain.xyz 正确路由并写入“这是根页面”,而 api.domain.xyz/test 显示错误。特别是,甚至没有调用 before_request 代码(我可以从日志中看出),这告诉我它永远不会进入代码。
非常感谢任何帮助!
解决方法
不完全确定这是否是您的问题,但flask 可能无法找到您的flask 程序,因此在该程序所在的目录中(以及已激活的任何虚拟环境)运行:
export FLASK_APP=<Your Python Program Name>
您可以通过运行测试它是否找到您的程序
flask run --host=0.0.0.0
很抱歉,如果这不起作用,但这是一个相当简单的解决方案,但已经发生了几次。
,原来代码没问题,但是文件夹结构不正确。似乎对于flask中的每条路线,文件夹结构中都需要有相应的文件夹。就我而言,我之前有过
├── api.domain.xyz
│ ├── main.py
│ ├── passenger_wsgi.py
│ ├── public
│ ├── tmp
我必须为每条路线添加一个单独的文件夹,在我上面的例子中:
├── api.domain.xyz
│ ├── main.py
│ ├── passenger_wsgi.py
│ ├── public
│ ├── tmp
│ ├── test
如果你要添加更深的路由(比如“@app.route('/test/v1/resources',subdomain="api",methods=['GET'])”,你需要添加文件夹
│ ├── test/v1/resources
也一样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。