Колба в cPanel показывает 404 для изображений в общей папке - PullRequest
0 голосов
/ 12 апреля 2019

Я установил приложение Flask на сервере cPanel с CloudLinux. Я использовал функцию установки Python App.

Приложение находится в папке / home / user / app. URL приложения: https://www.example.com/app

cPanel использует Phusion Passenger для работы приложения с Apache.

Когда я создал приложение, была создана папка / home / user / app / public, и предположительно все изображения должны идти туда.

Приложение работает хорошо, но все URL-адреса изображений в общей папке выдают ошибку 404. Я пробовал разные URL, такие как https://www.example.com/app/image.jpg, и https://www.example.com/app/public/image.jpg. Всегда 404.

Это первый раз, когда я использую эту функцию установки приложения Python.

Кто-нибудь знает, какой правильный URL-адрес использовать или что необходимо настроить для предоставления изображений?

Спасибо!

EDIT:

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 при определении маршрута. Я добавил вызов app.logger.info в файл send_data_file, и он вызывается.

app.config.get ['DATA_FOLDER'] равно ./public/data_store/data

Нет ошибок в журнале от send_from_directory.

1 Ответ

0 голосов
/ 13 апреля 2019

Для обслуживания статических файлов вне вашей основной папки 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">
...