首页 > 解决方案 > Laravel 5.8 资产 url 在 localhost 和服务器中的工作方式不同

问题描述

我正在尝试从 public/assets/img 文件夹中获取图像,该图像存在于 img 文件夹中,该文件夹位于公用文件夹中的 assets 文件夹中。我曾经src="{{ asset('/assets/img/example.png') }}"获取图像并且它在我的本地主机中正常工作,但是当我将代码推送到服务器(服务器是 UNIX)时,代码不起作用,但是当我将它更改为就像src="{{ asset('../public/assets/img/example.png') }}"它在服务器中一样工作但它不在本地。

那么,我们是否有一种方法可以从两者中获取图像,而无需使用不同的 url 进入本地和服务器的asset()。或者为什么在服务器中我必须在“/assets/img/example.png”之前添加“../public”,即使它不在本地?

标签: phplaravel-5.8

解决方案


首先,../public在服务器上使用是不对的。

我怀疑这是因为你使用"/assets/img/example.png"而不是"assets/img/example.png"

无论哪种方式,如果问题仍然存在,您可以覆盖服务器上的公共路径,以避免更新您使用该{{ asset() }}函数的每个代码。

将此应用程序绑定代码添加到位于 Laravel 项目中的 AppServiceProvider.php

<laravel-project-name>/app/Providers/AppServiceProvider.php

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('path.public', function() {
            return realpath(base_path().'../public');
        });
    }

这样,您就不必更改{{ asset() }}在服务器上使用该功能的每个代码。


推荐阅读