cpanel中的Python烧瓶应用程序路由:只能访问root url

Posted

技术标签:

【中文标题】cpanel中的Python烧瓶应用程序路由:只能访问root url【英文标题】:Python flask app routing in cpanel: can only access root url 【发布时间】:2020-11-16 06:54:24 【问题描述】:

我在 cPanel 中设置了一个 python 应用程序。我已将应用程序 URL 设置为 backend,当我查询 mydomain.com/backend/ 时,它会返回应用程序的根视图(这只是一个 html “你好”)。

其余端点是我需要的,但我在每个其他 URL 上都返回 404

@app.route('/')
def hello_world():
  logger.debug("Hi there")
  return "<h1 style='color:red'>Hi there</h1>"

@app.route('/test', methods=['POST','GET'])
def test():
    logger.info("Got test request")
    return 'ok' : 'success!'
mydomain.com/backend/ --> Hi there
mydomain.com/backend/test --> 404
mydomain.com/backend/<any_other> --> 404

我敢打赌,在到达脚本之前,还有其他一些服务会返回 404。我在public_html/.htaccess 中找不到对backend/ 的任何引用。依赖关系没问题(没有包抱怨)。

我在服务器上的权限非常有限。任何指针将不胜感激。

谢谢!

Ps 发现a similar question 没有答案

【问题讨论】:

这能回答你的问题吗? Are a WSGI server and HTTP server required to serve a Flask app? 没有。我相信我的问题特别与映射应用程序的 cpanel 方式有关。 【参考方案1】:

我的 Flask 应用程序中的所有路由(“/”除外)都有相同的问题,返回 500 错误:内部服务器错误。

在我的例子中,当我在 cpanel 上使用站点构建器应用程序时,.htaccess 文件有剩余代码。删除网站构建器项目并没有删除 .htaccess 文件中的代码,并且此旧代码会导致问题。

代码包括以下内容:

RewriteEngine On
RewriteBase /
DirectoryIndex index.php index.cgi index.html
RewriteCond %REQUEST_FILENAME !-f [OR]
RewriteCond %REQUEST_URI ^\/(js\/main\.js|css\/(\d+|common|site)\.css)$
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ ncsitebuilder/$1 [L,QSA]

禁用此代码为我解决了这个问题。

【讨论】:

【参考方案2】:

将以下规则添加到应用程序 url 目录中的 .htaccess 中

RewriteEngine on  
RewriteRule ^http://%HTTP_HOST%REQUEST_URI [END,NE]

为我解决了这个问题

【讨论】:

【参考方案3】:

您需要修改 .htaccess 文件以实现此目的。 由于您的应用程序在 mydomain.com/backend/ 中,当 apache 没有找到它时它会给出 404。为避免这种情况,您需要使用如下方式将所有请求重定向到您的应用程序。 Flask 会处理剩下的事情。

RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /backend/ [L]

【讨论】:

【参考方案4】:

我们团队的一名成员通过添加一个新的子域并在那里设置 URL 来解决这个问题。

因此,应用程序现在在 backend.mydomain.com/backend 上运行,而不是 mydomain.com/backend,并且运行良好。

干杯

【讨论】:

我很高兴知道为什么这行得通。对 cpanel 感到羞耻,对我们怜悯。

以上是关于cpanel中的Python烧瓶应用程序路由:只能访问root url的主要内容,如果未能解决你的问题,请参考以下文章

Python - 烧瓶默认路由可能吗?

在 CPanel 中使用 Python 在 Django 管理面板中加载静态文件

Vue.js 前端路由与后端烧瓶路由冲突

如何使用烧瓶将多个参数发送到路由?

如何确保烧瓶应用程序已在所有路线上获得授权?

Python 多处理管理器在烧瓶 API 中使用时显示错误