部署后,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

我们需要在 Apache Server 的虚拟主机配置中定义我们的 Laravel Web。

用于 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 中未显示图像的主要内容,如果未能解决你的问题,请参考以下文章

BeanStalk 服务器中未显示图像[关闭]

生产中的资产管道问题:CDN中未显示图像

Laravel 中未显示的部门

Laravel 5.3 中未显示 Passport 组件

在 Laravel 刀片中生成的 PDF 中未显示字体真棒图标

如果在 laravel 5.1 中未授权操作,则通过 ajax 显示错误