部署后,图像未显示在 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 但是当您复制图像路径并在新选项卡中打开它时,图像仍然可用。
我创建了用于图像上传的通用助手和用于从存储中获取完整图像 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 但是当您复制图像路径并在新选项卡中打开它时,图像仍然可用。