Python cpanel 中的 flask app 路由:只能访问 root url
Python flask app routing in cpanel: can only access root url
我在 cPanel 中设置了一个 python 应用程序。我已将应用 URL 设置为 backend
,当我查询 mydomain.com/backend/
时,它会返回应用的根视图(这只是一个 html “你好”)。
其余端点是我需要的端点,但我每隔一个返回 404 URL
@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 没有答案
我们团队的一名成员通过添加一个新的子域并在那里设置 url 解决了这个问题。
所以应用程序 运行 而不是 mydomain.com/backend
现在 backend.mydomain.com/backend
并且工作正常。
干杯
您需要修改 .htaccess 文件来实现此目的。
由于您的应用程序在 mydomain.com/backend/ 中,当 apache 找不到时它会给出 404。为避免这种情况,您需要像下面这样使用,它将所有请求重定向到您的应用程序。 Flask 会处理剩下的事情。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/ [L]
将以下规则添加到应用程序目录中的 .htaccess url
RewriteEngine on
RewriteRule ^http://%{HTTP_HOST}%{REQUEST_URI} [END,NE]
为我解决了这个问题
我的 Flask 应用程序中的所有路由(“/”除外)都遇到了同样的问题,返回 500 错误:内部服务器错误。
就我而言,.htaccess 文件包含早期我在 cpanel 上使用网站构建器应用程序时留下的代码。删除网站构建器项目并没有删除 .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/ [L,QSA]
禁用此代码解决了我的问题。
我在 cPanel 中设置了一个 python 应用程序。我已将应用 URL 设置为 backend
,当我查询 mydomain.com/backend/
时,它会返回应用的根视图(这只是一个 html “你好”)。
其余端点是我需要的端点,但我每隔一个返回 404 URL
@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 没有答案
我们团队的一名成员通过添加一个新的子域并在那里设置 url 解决了这个问题。
所以应用程序 运行 而不是 mydomain.com/backend
现在 backend.mydomain.com/backend
并且工作正常。
干杯
您需要修改 .htaccess 文件来实现此目的。 由于您的应用程序在 mydomain.com/backend/ 中,当 apache 找不到时它会给出 404。为避免这种情况,您需要像下面这样使用,它将所有请求重定向到您的应用程序。 Flask 会处理剩下的事情。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/ [L]
将以下规则添加到应用程序目录中的 .htaccess url
RewriteEngine on
RewriteRule ^http://%{HTTP_HOST}%{REQUEST_URI} [END,NE]
为我解决了这个问题
我的 Flask 应用程序中的所有路由(“/”除外)都遇到了同样的问题,返回 500 错误:内部服务器错误。
就我而言,.htaccess 文件包含早期我在 cpanel 上使用网站构建器应用程序时留下的代码。删除网站构建器项目并没有删除 .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/ [L,QSA]
禁用此代码解决了我的问题。