Символическая ссылка хранилища не работает с Laravel и Vue в Namecheap CPanel (LiteSpeed)

Я пытаюсь получить доступ к своим файлам изображений, хранящимся внутри storage/app/public/subfolder/, используя символическую ссылку внутри папки /public в моем приложении Laravel. Все отлично работает в моей локальной настройке, а также в развертывании Jelastic Apache, но, похоже, это не работает в CPanel с LiteSpeed. Я пытаюсь получить доступ к файлам по ссылке /storage/subfolder/image.png, но она недоступна при развертывании CPanel.

Я пытался создать и удалить символическую ссылку на хранилище сотни раз, но это не сработало. Ниже приведены несколько вещей, которые я пробовал:

  1. Удаление и создание символической ссылки снова и снова с помощью команды php artisan storage:link.
  2. Создание символической ссылки с помощью команды linux ln -s ../storage/app/public storage внутри общей папки.
  3. Запуск Artisan::call('storage:link') с использованием записи веб-маршрута.
  4. Повторное развертывание и перенастройка приложения несколько раз и создание символической ссылки на хранилище.

Во всех этих неудачных попытках я могу убедиться, что символическая ссылка хранилища создается каждый раз внутри общей папки. Я могу перемещаться и просматривать файлы из папки public/storage/ с помощью терминала CPanel без каких-либо проблем, но не могу получить к ним доступ в развернутом приложении.

У меня точно такая же конфигурация в развертывании Jelastic Apache и в моем локальном развертывании, и там все работает без проблем.

ОБНОВИТЬ:

Кроме того, я попытался вручную создать storage папку public с той же структурой, и это сработало. Но симлинк не работает.

ОБНОВЛЕНИЕ 2: Я нашел ниже журнал ошибок при проверке журналов ошибок из CPanel.

2022-11-06 05:07:07.342556 [ERROR] [1669834] [T0] [HTAccess] Failed to open [/home/user/my-project/public/storage/subfolder/.htaccess]: Permission denied

.htaccess внутри subfolder нет, но он есть в моей общей папке.

В чем может быть проблема?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После привязки хранилища к общедоступному пути с помощью storage:link вы можете получить доступ к своей папке: 'Путь_к_хранилищу('подпапка/image.png');'

На самом деле я использую его в своем проекте Vue и использую как: <img src = "/storage/subfolder/image.png"/>. Он отлично работает локально и в моем развертывании Apache, но не работает здесь.

iamsubingyawali 05.11.2022 16:09

попробуйте <img :src = "'../storage/subfolder/image.png'">

Mahmoud 05.11.2022 16:15

Я не думаю, что неправильный путь является проблемой здесь. Я проверил это, вручную создав каталог хранилища внутри общей папки и поместив туда файлы с тем же деревом, что и хранилище / приложение / общедоступное, и это работает нормально. Таким образом, проблема полностью связана с символической ссылкой. Когда каталог создается вручную (вместо символической ссылки), файлы доступны по тому же пути, что и выше.

iamsubingyawali 05.11.2022 16:29
Ответ принят как подходящий

После долгих поисков я наконец нашел причину.

Почему-то у каталога storage/app/public не было достаточных разрешений. Итак, я дал разрешения этой общей папке рекурсивно, используя chmod, и теперь все работает нормально.

Символическая ссылка работала нормально, но не работала из-за проблем с разрешениями в родительской папке.

Это немного странно, так как я никогда не менял разрешения вручную в каких-либо папках Laravel ни в одном из моих других развертываний.

Другие вопросы по теме