Python 在子域上托管flask应用程序(在主域上托管WordPress)

Python 在子域上托管flask应用程序(在主域上托管WordPress),python,flask,subdomain,namecheap,Python,Flask,Subdomain,Namecheap,我希望你能在以下方面提供帮助,因为我已经努力使它工作了很多天了 为了给你们一点背景知识,我曾经在我的网站domain.xyz上托管过一个flask应用程序。它托管在namescape上,并通过CPanel Python应用程序运行。 然后我决定在同一个站点上也有一个WordPress,所以我不得不将烧瓶移动到子域api.domain.xyz 现在,Wordpress站点可以工作了,flask应用程序(api.domain.xyz)的根页面也可以工作。但是,烧瓶的所有其他路径都会显示相同的错误页面

我希望你能在以下方面提供帮助,因为我已经努力使它工作了很多天了

为了给你们一点背景知识,我曾经在我的网站domain.xyz上托管过一个flask应用程序。它托管在namescape上,并通过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)
#main.py
从烧瓶导入烧瓶,jsonify,请求,中止
导入操作系统
从烧瓶进口g
导入时间
导入套接字
app=Flask(名称、子域匹配=True)
#app.config[“应用程序根”]=“/api”
#app.config[“DEBUG”]=True
@请求前的应用程序
请求前定义():
打印(“请求前”)
g、 开始=时间。时间()
@app.route('/test',subdomain=“api”,methods=['GET']))
def test():
返回“api”
@app.route('/',方法=['GET'])
def home():
打印(“主页”)
返回“”这是根页面。

“” @请求后的应用程序 请求后的def(响应): diff=time.time()-g.start 打印(“请求时间:+str(差异)) 如果((response.response)和
(200不完全确定这是否是您的问题,但flask可能无法找到您的flask程序,因此在程序所在的目录中(以及所使用的任何虚拟环境都已激活)运行:


很抱歉,如果这不起作用,但这是一个相当简单的解决方案,但已经发生过几次。

结果表明代码是正确的,但是文件夹结构不正确。似乎对于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

同样。

感谢您的建议,但我不认为我的提供商(namecheap)现在提供此共享主机(“stellar”计划)试图从
/test
路由中删除
subdomain=“api”
?再次感谢您的建议,我最终修复了它(请参阅下面的解决方案)谢谢你的建议,但不幸的是,这并没有解决问题。我仍然在想,因为根页面显示正确,但没有其他页面的日志,路由时一定有问题。这只是在你的计算机上运行还是作为apache之类的Web服务器运行?它运行在名称便宜的Webhosting上,我相信是在apache上。你有吗访问apache文件,因为一个端口上可能有两个网站,并且需要禁用一个。我想我没有,但我可以如下设置重定向:。这有帮助吗?
    ├── api.domain.xyz
    │   ├── main.py
    │   ├── passenger_wsgi.py
    │   ├── public
    │   ├── tmp
    │   ├── test
│   ├── test/v1/resources