部署后,Laravel 中未显示图像
Posted
技术标签:
【中文标题】部署后,Laravel 中未显示图像【英文标题】:After Deployment, Images not showing in Laravel 【发布时间】:2021-11-04 05:40:46 【问题描述】:我创建了用于图像上传的通用助手和通用特征函数,用于从存储中获取图像完整 URL,我在 Laravel 的默认内置服务器中对其进行了测试,它的 1005 完美运行。
但部署后我无法显示图像。它向我显示 404 错误
我分享了我的通用功能,即从存储中获取图像的完整 URL 路径。
app/Traits>HasProfilePhoto.php 文件
public function getProfilePhotoUrlAttribute()
return $this->profile_photo_path
? Storage::disk($this->profilePhotoDisk())->url($this->profile_photo_path)
: \URL::to('/').'/adminLTE/dist/img/user-img.png';
以上函数将返回图片的完整 URL 路径 Like。"test.com/storage/users/user.png"
使用 Laravel 的默认内置服务器,它会像这样返回完整的 URL。 http://localhost:8000/storage/users/user.png & 使用该路径图像完美显示
但是在使用 XAMPP Server 部署到本地 Windows 之后,它会返回这样的完整 URL。 http://localhost/ProjectFolderName/storage/users/user.png & 它是 show 404 Not Found
注意:- 如果我像这样使用 FULL Url:- http://localhost/ProjectFolderName/public/storage/users/user.png 然后显示图像
请帮我看看我的错误是什么?
* **我如何部署我的 Laravel 项目见下文:- **
*
root/server.php 文件用 index.php 重命名
&root/public/.htaccess 文件复制到根目录
【问题讨论】:
你的 laravel 公共目录应该是域根目录。旁注:XAMPP 可能不是 Laravel 开发环境的最佳选择(例如,最好使用php artisan serve
)
@GertB。请您分享有关部署的完整详细示例吗?
【参考方案1】:
出于安全原因,将server.php
文件重命名为index.php
也不是好的做法。因此,如果您需要从 URL 中隐藏 public
路径,则在根级别创建一个 .htaccess
:
<ifmodule mod_rewrite.c>
<ifmodule mod_negotiation.c>
Options -MultiViews
</ifmodule>
RewriteEngine On
RewriteCond %REQUEST_FILENAME -d [OR]
RewriteCond %REQUEST_FILENAME -f
RewriteRule ^ ^$1 [N]
RewriteCond %REQUEST_URI (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ server.php
</ifmodule>
由 Harsh Patel 更新:- 2021 年 9 月 8 日
实际上问题是关于在服务器中定义虚拟主机......我被定义为DocumentRoot
路径和Directory
路径就像"C:/xampp/htdocs/projectFolderName/
这个。
我从here medium's Blog 发现我的部署错误
但是根据Laravel Documentation ,我们需要将所有请求定向到public/index.php
,换句话说,Laravel 的公共文件夹是我们服务器的根 (public_html) 文件夹,这就是我需要定义 @987654336 的原因@ & Directory
到这样的公共文件夹C:/xampp/htdocs/projectFolderName/public
用于 XAMPP 服务器
第一步:在XAMPP服务器中打开C:\xampp\apache\conf\extra
路径位置
第 2 步:打开 httpd-vhosts.conf
文件
第三步:定义虚拟主机规则如下
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "C:/xampp/htdocs/projectFolderName/public"
<Directory "C:/xampp/htdocs/projectFolderName/public">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
如果您在定义 XAMPP 中的虚拟主机时遇到任何问题,那么您可以查看关于 How to define Virtual Host in XAMPP
的完整详细答案& 如果您使用 WAMPP 服务器,那么您可以看到关于 How to define Virtual Host in WAMPP
的完整详细答案【讨论】:
我已经使用命令在公共路径创建了存储路径的符号。 & Storage::disk('public)->get('file.png') 是从刀片模板获取文件或图像或在 API 中响应它,但我想传递位于存储的完整图像路径。然后使用该路径浏览器将自动获取图像 不,我无法在浏览器中手动使用图像访问。它的显示 404 未找到。和兄弟我在本地的我们的服务器 PC(操作系统:- Windows)中部署 Laravel Web。如果我使用 laravel 的默认服务器,那么我也可以手动访问 函数返回该路径localhost/microtechcoupon/storage/users/…,但即使我无法使用此链接在浏览器中手动访问,它也会显示404错误....但是当我尝试在浏览器中手动localhost/microtechcoupon/public/storage/users/…此链接时然后它的作品......所以我认为我在部署中犯了任何错误......否则功能正常 是的,正确。但据我所知,我们可以直接访问存储文件,而无需在存储 URL 之前提及 public 并且它在默认服务器中工作,在部署中不起作用 yes 如果我们将 public 文件夹定义为根目录,那么我们不需要用 index.php & 重命名 server.php,也不需要复制 public/.htaccess 文件在根目录【参考方案2】:也许您只需要在 .env 中设置您的项目 URL 以以 http:// 开头
APP_URL=http://your-project-url
如果没有这个,图像将没有正确的 URL,但是当您复制图像路径并在新选项卡中打开它时,图像仍然可用。
【讨论】:
不,您的意见是正确的,但我在 .env 配置文件中正确设置了 APP_URL。我的情况没有问题。我已经在 Amit Senjaliya 的回答中编辑了我的问题的答案。我已经解决了我的问题。谢谢 很高兴听到这个消息,以防其他人遇到类似的问题,这可能会有所帮助,因为我一直在寻找解决方案。不客气以上是关于部署后,Laravel 中未显示图像的主要内容,如果未能解决你的问题,请参考以下文章