Laravel 10部署到cPanel后无法访问Storage文件求助
Laravel 10 cPanel部署:Storage软链无法访问的解决方案
1. 修正Filesystems配置
你的config/filesystems.php中public磁盘的url配置与软链结构不匹配,需修改为:
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', // 原配置为/storage/app/public,改为/storage 'visibility' => 'public', 'throw' => false, ],
2. 清除配置缓存
修改配置后必须清除缓存,确保新配置生效:
php artisan config:cache
若cPanel无终端权限,可创建临时PHP脚本执行:
<?php require __DIR__.'/../your_laravel_project_path/vendor/autoload.php'; $app = require_once __DIR__.'/../your_laravel_project_path/bootstrap/app.php'; $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); $kernel->handle( new Symfony\Component\Console\Input\ArrayInput(['command' => 'config:cache']), new Symfony\Component\Console\Output\NullOutput ); echo "配置缓存已清除";
上传到public_html访问该脚本,完成后删除。
3. 验证软链接有效性
在cPanel文件管理器中检查public_html/storage链接:
- 若为红色(无效),先删除旧链接:
rm /home/your_cpanel_username/public_html/storage - 用绝对正确的实际路径重新创建软链:
替换ln -s /home/your_cpanel_username/your_laravel_project/storage/app/public /home/your_cpanel_username/public_html/storageyour_cpanel_username和your_laravel_project为真实路径。
4. 确认目录与文件权限
确保相关目录和文件权限符合要求:
# 设置目录权限 chmod 755 /home/your_cpanel_username/your_laravel_project/storage chmod 755 /home/your_cpanel_username/your_laravel_project/storage/app chmod 755 /home/your_cpanel_username/your_laravel_project/storage/app/public # 设置文件权限 chmod 644 /home/your_cpanel_username/your_laravel_project/storage/app/public/performa_invoices/* # 确保所有者为你的cPanel用户名 chown -R your_cpanel_username:your_cpanel_username /home/your_cpanel_username/your_laravel_project/storage
5. 检查.htaccess规则
确保public/.htaccess已完整复制到public_html,且无阻止storage访问的规则。Laravel默认规则会跳过实际存在的文件/目录,内容如下:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
6. 测试访问路径
上传文件后,正确的访问URL应为:
https://your-domain.com/storage/performa_invoices/your-image.jpg
请勿添加/app/public后缀。
内容的提问来源于stack exchange,提问作者Muhammad Nabeel Siddiqui
相关产品推荐
相关产品推荐

