Я пытаюсь получить доступ к своим файлам изображений, хранящимся внутри storage/app/public/subfolder/
, используя символическую ссылку внутри папки /public
в моем приложении Laravel. Все отлично работает в моей локальной настройке, а также в развертывании Jelastic Apache, но, похоже, это не работает в CPanel с LiteSpeed. Я пытаюсь получить доступ к файлам по ссылке /storage/subfolder/image.png
, но она недоступна при развертывании CPanel.
Я пытался создать и удалить символическую ссылку на хранилище сотни раз, но это не сработало. Ниже приведены несколько вещей, которые я пробовал:
php artisan storage:link
.ln -s ../storage/app/public storage
внутри общей папки.Artisan::call('storage:link')
с использованием записи веб-маршрута.Во всех этих неудачных попытках я могу убедиться, что символическая ссылка хранилища создается каждый раз внутри общей папки. Я могу перемещаться и просматривать файлы из папки 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
нет, но он есть в моей общей папке.
В чем может быть проблема?
После привязки хранилища к общедоступному пути с помощью storage:link вы можете получить доступ к своей папке: 'Путь_к_хранилищу('подпапка/image.png');'
попробуйте <img :src = "'../storage/subfolder/image.png'">
Я не думаю, что неправильный путь является проблемой здесь. Я проверил это, вручную создав каталог хранилища внутри общей папки и поместив туда файлы с тем же деревом, что и хранилище / приложение / общедоступное, и это работает нормально. Таким образом, проблема полностью связана с символической ссылкой. Когда каталог создается вручную (вместо символической ссылки), файлы доступны по тому же пути, что и выше.
После долгих поисков я наконец нашел причину.
Почему-то у каталога storage/app/public
не было достаточных разрешений. Итак, я дал разрешения этой общей папке рекурсивно, используя chmod
, и теперь все работает нормально.
Символическая ссылка работала нормально, но не работала из-за проблем с разрешениями в родительской папке.
Это немного странно, так как я никогда не менял разрешения вручную в каких-либо папках Laravel ни в одном из моих других развертываний.
На самом деле я использую его в своем проекте Vue и использую как:
<img src = "/storage/subfolder/image.png"/>
. Он отлично работает локально и в моем развертывании Apache, но не работает здесь.