Приятно встретить клиента здесь, в стеке :)!
Проблема, с которой вы столкнулись, действительно вызвана cPanel и тем, как он обрабатывает скрипты Python. Вероятно, у каждого провайдера веб-хостинга cPanel также будут, если не одинаковые, аналогичные проблемы, поэтому я считаю, что этот ответ может быть полезен для всех пользователей Python cPanel.
Я постараюсь, чтобы технический тон был более мягким, поскольку речь идет о довольно большом количестве технических предметов.
Начнем с объяснения того, как Python и cPanel работают вместе.
Когда вы создаете приложение на Python, cPanel создает две вещи:
- Виртуальная среда для вашего приложения
- .htaccess файл, который используется, чтобы сообщить веб-запросу, как подключиться к вашему приложению
Используя эту информацию, мы можем выделить две службы, которые принимают участие в общении между вашими посетителями и вашим приложением python - веб-служба и служба python.
Веб-служба просто сопоставляет ваш домен со сценарием запуска приложения python, используя файл .htaccess, хранящийся в корневом каталоге документа вашего домена, а затем служба python обрабатывает логику кода вашего приложения. Как только результат кода приложения готов, Python отправляет результат обратно в веб-сервис, который, наконец, отправляет его посетителю в виде простого HTML-файла. (Не так сильно отличается от того, как на самом деле работает php!)
Что происходит со статическими запросами файлов и почему они приводят к коду состояния 404?
Когда дело касается статических файлов, ситуация с ними другая. Сразу после отправки HTML-ответа вашему посетителю в его браузер загружается дерево HTML DOM.
Затем браузер запрашивает каждый статический ресурс, используемый на странице - изображения, js-файлы, css-файлы и так далее. Однако статические ресурсы не обрабатываются python, поэтому веб-сервер распознает запрос как простой, который не требует маршрутизации к вашему приложению python.
Другими словами, веб-сервер ожидает, что статические ресурсы находятся в корневом каталоге документов вашего домена. Однако это не так, поскольку корень документа, в котором развернуты все файлы приложения Python, отличается от корня документа, с которым настроен домен. Я знаю, это звучит сложно, но это действительно вопрос понимания технологии и настройки вашего приложения.
Как устранить ошибку и снова сделать приложение великолепным?
У вас есть два варианта здесь.
- Вы можете взять папку, содержащую ваши статические ресурсы, и развернуть ее в корневом каталоге документов вашего домена.
Например:
Основной домен для вашей учетной записи - example.com. Он настроен для работы с каталогом public_html (корнем документа) вашей учетной записи, который переводится по следующему абсолютному пути:
/home/user/public_html
Ваше приложение на python развернуто в папке за пределами этой, например, MyPythonApp со следующим абсолютным путем:
/home/user/MyPythonApp
Папка, содержащая ваши статические ресурсы, изначально находится в папке приложения python:
/home/user/MyPythonApp/static/
И запрос к статическому ресурсу, который приводит к ошибке 404, выглядит так:
GET http://example.com/static/styles.css
Просто переместив «статическую» папку из / home / user / MyPythonApp / static в / home / user / public_html /, вы разрешите запросу правильно извлечь ресурс.
- Вы можете изменить корневой каталог документа своего домена, чтобы он соответствовал папке, в которой развернуто приложение python.
Однако для выполнения этой задачи вам понадобится наша помощь, и для этого я хотел бы попросить вас отправить заявку в нашу группу технической поддержки, чтобы они могли помочь вам в этом. Если вы предпочитаете эту опцию, отправьте им ссылку на этот вопрос.
С наилучшими пожеланиями!