cPanel 中的 Flask 对 public 文件夹下的图像显示 404

Flask in cPanel showing 404 for images under public folder

我已经使用 CloudLinux 在 cPanel 服务器中设置了一个 Flask 应用程序。我使用了设置 Python 应用程序功能。

该应用位于文件夹 /home/user/app 中。应用 URL 是 https://www.example.com/app

cPanel 使用 Phusion Passenger 使应用程序与 Apache 一起工作。

当我创建应用程序时,创建了一个文件夹 /home/user/app/public,并且所有图像应该都放在那里。

该应用运行良好,但 public 文件夹中的所有 URL 图像都出现 404 错误。我试过不同的 urls ,比如 https://www.example.com/app/image.jpg, and https://www.example.com/app/public/image.jpg 。总是 404.

这是我第一次使用此设置 Python 应用程序功能。

有谁知道URL使用哪个是正确的,或者需要配置什么才能提供图像?

谢谢!

编辑:

图像 url 是使用 url_for 创建的:

return url_for('general.send_data_file', filename=key)

生成的 url 看起来是正确的

我添加了一个路径来提供文件:

@general_blueprint.route('/public/data_store/data/<filename>', methods=['GET'])
def send_data_file(filename):
    return send_from_directory(app.config.get('DATA_FOLDER'), filename)

我收到 404 而不是文件。

生成的文件url例如是/app/public/data_store/data/test.jpg。 该应用程序在 /app 下运行,所有创建的路由都有效,并且在定义路由时不使用 /app。我在 send_data_file 中添加了一个 app.logger.info 调用,它正在被调用。

app.config.get['DATA_FOLDER'] 等于 ./public/data_store/data

send_from_directory 的日志中没有错误。

为了在您的应用程序中的主 static 文件夹之外提供静态文件,您需要在 Flask 配置中更改它,如下所示:

app = Flask(__name__, static_folder='/home/user/app/public')

然后,使用 url_for 作为相对路径,将 static 作为 HTML 文件中的第一个参数:

<img src="{{ url_for('static', filename='images/image.svg') }}" alt="svg image">