通过符号链接创建的文件夹出现问题。它是通过创建一个PHP文件并添加symlink((操作手动创建的,因为它部署在CPanel主机上。公用文件夹位于与Laravel主项目不同的目录中。现在,我正试图通过URL"来访问我的文件;domain.com/storage/uploads/img/filenname.png;问题是,它返回了一个404错误。
目录的结构如下:
- Laravel附带的公用文件夹位于api.domain.com中(我们在另一个目录中添加了一个子域(,该目录为:/home/account/api.domain.com/
- Laravel项目位于不同的文件夹中:/home/account/laraavel项目/
要确认,上传的文件存在于我所引用的文件夹中,并且符号链接连接在该文件夹中。我正在访问正确的URL(希望如此(。我还试着在文件管理器中打开符号链接文件夹本身,如果它真的连接到了文件夹,它就是!
以下是我在控制器中保存文件的方式:
$myFile->storeAs('public/uploads/img', $myFile->getClientOriginalName());
以下是保存路径的方法:
$filePath = asset('storage/uploads/img/' . $myFile->getClientOriginalName());
每当我试图嵌入图像时,它都会被破坏。每当我尝试在浏览器中访问该文件时,它都会返回404错误。
注:
- 在WHM上启用FollowSymLink
- 我尝试通过删除旧文件夹并重新链接来重新创建符号链接(我没有键入
php artisan storage:link
,我手动键入了符号链接("/home/account/laravel-project/storage/app/public',"/home/aaccount/api.domain.com/storage"( - 这是我的
.htaccess
:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
Options +FollowSymLinks
# 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
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ index.php [L]
</IfModule>
- 这篇文章的问题与我的问题相似,但解决方案不起作用
我通过搜索其他搜索查询尝试了不同的方法,但无法正常工作。我不确定我是遗漏了什么,还是需要安装软件包。
几天前我遇到了类似的问题,即使文件在那里,符号链接也存在并且很好。帮助我的是保证laravel文件和文件夹的所有权限都是正确的。我做了下一件事:
- 我用chmod确保所有文件都是644,文件夹是755(我想你可以从cPanel更改,但如果你有SSH访问权限会更容易(:
sudo find /path/to/your/root/directory -type f -exec chmod 644 {} ;
sudo find /path/to/your/root/directory -type d -exec chmod 755 {} ;
- 然后我让www数据(ubuntu上的默认web用户-在大多数web提供商上,这是这种情况(成为laravel项目目录的默认所有者:
sudo chown -R www-data:www-data /path/to/your/root/directory
确保在这之后,你是在组www数据。
- 然后我删除了引导程序/缓存文件夹以清除缓存。在它被重新创建后,我做到了:
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
我想发生的事情是你在网络服务器上的权限错误,这就是我的情况。确保运行
php artisan optimize:clear
此外,请确保在.env文件中正确设置了域。
完成所有操作后,您可以再次清除所有缓存。如果没有更多关于权限设置和组的信息,我不确定这会对你有所帮助,但这肯定是一件值得尝试的事情。