Como resolver un problema de imagen en laravel - apache : Síntoma: URL https://dominio/storage/... devuelve 404.
-
Causa:
DocumentRootno apunta a/public, symlink roto oFILESYSTEM_DISKmal. -
Solución rápida:
-
APP_URLy disco:sed -i 's#^APP_URL=.*#APP_URL=https://dominio#' .env sed -i 's#^FILESYSTEM_DISK=.*#FILESYSTEM_DISK=public#' .env php artisan config:clear -
Symlink correcto:
[ -e public/storage ] && [ ! -L public/storage ] && mv public/storage public/storage.bak.$(date +%F-%H%M) php artisan storage:link -
Permisos:
chown -R www:www storage/app/public public/storage find storage/app/public -type d -exec chmod 775 {} \; find storage/app/public -type f -exec chmod 664 {} \; -
VirtualHost (Apache) →
/public:DocumentRoot "/ruta/app/public" <Directory "/ruta/app/public"> AllowOverride All Require all granted </Directory>Recarga:
service httpd reloadosystemctl reload apache2.
-
-
Verificación:
ls -l public/storage readlink -f public/storage curl -I "https://dominio/storage/carpeta/archivo.png" -
Prevención: no crear
public/storagea mano; siemprestorage:link. Evitar espacios en nombres o usar URL-encoding.
#2 Tema
File Manager sube a /photos/1/test en vez de /photos/1/Productos
Respuesta
-
Síntoma: archivos terminan en
.../test/.... -
Causa:
working_dirdel File Manager apunta a la carpeta equivocada. -
Solución:
-
Abrir el FM con destino fijo:
const wd = encodeURIComponent('/photos/1/Productos'); window.open(`/laravel-filemanager?type=image&working_dir=${wd}`, 'FileManager', 'width=900,height=600'); -
O con helper:
$('#lfm').filemanager('image', { prefix:'/laravel-filemanager', working_dir:'/photos/1/Productos' }); -
Mover lo ya subido:
rsync -av --remove-source-files storage/app/public/photos/1/test/ storage/app/public/photos/1/Productos/
-
-
Verificación: subir una imagen y comprobar URL pública
/storage/photos/1/Productos/....
#3 Tema
Directorio público mal configurado en Apache
Respuesta
-
Síntoma: rutas
/buildy/storagefallan o cargan mal. -
Causa: VirtualHost apunta al root del proyecto y no a
/public. -
Solución:
<VirtualHost *:80> ServerName dominio DocumentRoot "/ruta/app/public" <Directory "/ruta/app/public"> Options FollowSymLinks AllowOverride All Require all granted DirectoryIndex index.php index.html </Directory> <FilesMatch "\.php$"> SetHandler "proxy:unix:/tmp/php-cgi-83.sock|fcgi://localhost" </FilesMatch> </VirtualHost>Recargar Apache.
-
Verificación:
curl -I https://dominio/build/manifest.jsondebe dar 200; imágenes en/storagedeben cargar.