部署后,图像未显示在 Laravel 中

After Deployment, Images not showing in Laravel

我创建了用于图像上传的通用助手和用于从存储中获取完整图像 URL 的通用特征函数,我在 Laravel 的默认内置服务器中对其进行了测试,它 1005 完美运行。

但部署后我无法显示图像。它向我显示 404 错误

我分享了我的获取完整的常用功能 URL 从存储中获取图像的路径。

app/Traits>HasProfilePhoto.php file

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';
}

以上函数将 returns 图像的完整 URL 路径 Like."test.com/storage/users/user.png"

使用 Laravel 的默认内置服务器 returns 完整 URL 就像这样。 http://localhost:8000/storage/users/user.png & 使用该路径 图像完美显示

但在使用 XAMPP 服务器 在本地 部署后 Windows,它 returns 完全 URL 像这样。 http://localhost/ProjectFolderName/storage/users/user.png 并且 显示 404 未找到

NOTE:- If I use FULL Url like this:- http://localhost/ProjectFolderName/public/storage/users/user.png then image displayed

请帮我看看我哪里错了?

* **我是如何部署我的 Laravel 项目的,见下文:- **

*

root/server.php file renamed with index.php

& root/public/.htaccess file copied at root directory

出于安全原因,将 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 ^ ^ [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/ 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</ifmodule>

Harsh Patel 更新:- 2021 年 9 月 8 日

实际上问题是关于在服务器中定义虚拟主机... 我被定义为 DocumentRoot 路径和 Directory 路径就像 "C:/xampp/htdocs/projectFolderName/这个。

I was identified my mistake in deployment from here medium's Blog

但根据 Laravel Documentation ,我们需要将所有请求定向到 public/index.php,换句话说 Laravel 的 Public 文件夹是我们服务器的根 (public_html) 文件夹,这就是为什么我需要像这样定义 DocumentRoot & Directory 到 public 文件夹 C:/xampp/htdocs/projectFolderName/public

  • 我们需要在 Apache 服务器的虚拟主机配置中定义我们的 Laravel Web。

用于 XAMPP 服务器

第 1 步:在 XAMPP 服务器

中打开 C:\xampp\apache\conf\extra 路径位置

第 2 步:打开 httpd-vhosts.conf 文件

第 3 步:如下定义虚拟主机规则

<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[= 的完整详细答案60=]

& 如果你使用 WAMPP 服务器 那么你可以看到关于 How to define Virtual Host in WAMPP

的完整详细答案

也许您只需要在 .env 中设置您的项目 URL 以 http://

开头

APP_URL=http://your-project-url

如果没有这个,图像将不会有正确的 URL 但是当您复制图像路径并在新选项卡中打开它时,图像仍然可用。