资产不引用公用文件夹(Laravel)

Posted

技术标签:

【中文标题】资产不引用公用文件夹(Laravel)【英文标题】:Assets not referencing to public folder (Laravel) 【发布时间】:2017-04-02 15:20:23 【问题描述】:

我的 laravel 项目中有 public 文件夹,里面有一些 js 和 css 文件。

我正在使用资产功能,即使它引用公用文件夹,我的文件也没有加载到页面上。

我正在使用这段代码来加载(这只是一个例子,还有更多文件):

<link href=" asset('css/style.css') " rel="stylesheet">

在浏览器的控制台上,我得到了这样的东西:

加载资源失败:服务器响应状态为 404(未找到) http://localhost:8000/css/style.css

好吧,我尝试恢复上次提交,但没有成功。试图更改为 URL::asset() 函数,没有。尝试了以下链接中的所有内容:http://laravel.io/forum/09-17-2014-problem-asset-not-point-to-public-folder?page=1 并成功。

请帮忙?

谢谢!

【问题讨论】:

您使用什么环境来访问您的项目?本地、托管服务器等? 尝试读取/storage/logs下的apache/nginx或laravel日志。您可以在那里找到更多信息。 你的 laravel 版本是什么? 您是否使用 Elixir 进行资产编译?如果是这样,您的 gulpfile 是什么样的? 抱歉拖了太久。它在我的本地主机中。我正在使用 XAMPP。所以,到目前为止我所做的:我曾经在我的 httpd.conf 文件中有一个虚拟主机,我删除了它并且没有工作。我也试过 localhost:8000/public/ 但没有用。我从 laravel 创建了一个新项目,并将其他项目中的所有内容都复制到了这个项目中,并且成功了。哈哈。但是另一个项目有什么问题呢?我正在使用版本 5.0.16。不使用灵丹妙药。谢谢你的回答! 【参考方案1】:

我遇到了同样的问题。这是由于将 .htaccess 文件从公共移动到项目的根目录,以便为 localhost/project 而不是 localhost/project/laravel 提供服务。并且需要在资产中使用 public :

<link href=" asset('public/css/app.css') " rel="stylesheet">

或者,从 /Illuminate/Foundation/helpers.php 修改资产函数

if (! function_exists('asset')) 
    /**
     * Generate an asset path for the application.
     *
     * @param  string  $path
     * @param  bool    $secure
     * @return string
     */
    function asset($path, $secure = null)
    
        return app('url')->asset("public/".$path, $secure);
    

前面的方法不是好方法。无论如何,如果有设置资产路径的配置,这会更容易。

【讨论】:

【参考方案2】:

添加您的env

ASSET_URL=public 

ASSET_URL=public/

ASSET_URL=/public

你需要哪一个你可以做到...

【讨论】:

对我而言 ASSET_URL=localhost/project_name/public 有效。 ASSET_URL=public 或其他不生成完整路径,它从 public/assets/css/main.css 等公共开始。不包括应用 url/基本 url。为什么? 你不需要在本地 Laravel 项目中添加这些可以正常工作而无需在某些共享主机中添加它需要的这些使用这样的资产它可以工作 没有 /public 它不能在使用 XAMPP 的本地机器上工作。我将在托管服务器上试一试。 简单地尝试asset('css/style.css') 这个如果不起作用然后尝试在.env文件中添加我给出的上层解决方案它有效不是全部添加一个一个尝试跨度> 【参考方案3】:

在您保存并成功设置您的.htaccess (like this) 后,您的方法将按照您的预期工作:

<link href=" asset('css/style.css') " rel="stylesheet">

请注意,在您设置 .htaccess 后,所有 客户端 URL 请求(对图像、javascript/CSS 文件、JSON 的请求)将受到重写规则的影响。

另外请注意,您可能需要一段时间才能看到更改。缓存可能会干扰这些更改。因此,请确保清除 Laravel 缓存:

在您的 Shell 中单独运行以下命令:

php artisan cache:clear
php artisan route:cache
php artisan config:cache
php artisan view:clear

并确保在浏览器设置中暂时禁用缓存:

在 Google Chrome 中:打开开发工具 > 打开网络标签 > 勾选“禁用缓存”

其他浏览器:在线搜索如何做到这一点。

【讨论】:

运行这些命令后,我收到这些错误 (2/2) QueryException SQLSTATE[42S02]: Base table or view not found: 1146 Table 'arcade_oms.oc_order' 不存在 (SQL: SELECT (SELECT COUNT(order_id) FROM .oc_order WHERE date_added = '2021-02-15' AND order_status_id = '1') 待处理【参考方案4】:
<link href=" asset('/css/style.css') " rel="stylesheet">

试试这个

【讨论】:

【参考方案5】:

我在.env 的情况下尝试过

ASSET_URL=public

单独使用斜线,所有相关的 SO 答案都没有任何帮助,然后打开了我的旧项目 并看到了。这最终对我有用(当然,在清除视图和缓存旁边)

ASSET_URL="$APP_URL"

我在谈论本地主机方面

【讨论】:

【参考方案6】:

在你的 .htaccess 文件中添加这个

RewriteEngine On
RewriteCond %REQUEST_URI !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

它会解决你的问题。确定

【讨论】:

不工作:127.0.0.1:8000/invoice/2021-07-28/28-07-21 IFE000.pdf。这里缺少公共。当我添加公共然后这工作【参考方案7】:

由于您已将 .htaccess 文件移动到根文件夹,因此您必须在使用的任何位置更改资产 url。网址应如下所示,

<link href=" asset('public/css/style.css') " rel="stylesheet">

或者,您可以在 .env 文件中将 ASSET_URL 设置为“public”,

ASSET_URL=http://localhost/projectname/public

【讨论】:

【参考方案8】:

对不起我的英语,我在使用 mike42/escpos-php 时遇到同样的问题是因为在 xampp 中

我转到 zlib.output_compression=on

正确的方法是

zlib.output_compression=off

资产再次工作

【讨论】:

【参考方案9】:

并确保在浏览器设置中暂时禁用缓存:

在谷歌浏览器中:

Open Dev Tools &gt; Open the Network tab &gt; Check "Disable cache".

其他浏览器:在线搜索如何做到这一点。

这对我有用。似乎之前加载的 CSS 和 JS 都在缓存中,直到它被释放,新的才不会加载

【讨论】:

首先,感谢您的回答,虽然有时您的回答是相关的,但不是。正如没有人所做的那样,我将添加一个解释而不投反对票。问题提到了Failed to load resource: the server responded with a status of 404 (Not Found),这意味着浏览器在路径中找不到文件。如果问题中不存在该语句,则可能意味着正在加载旧(缓存)版本的文件。此外,缓存版本会产生问题,例如为什么我的更改没有得到反映,而不是非常具体的 asset not referencing to public ... 标题。

以上是关于资产不引用公用文件夹(Laravel)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Laravel 中的文件直接上传到公用文件夹?

Laravel:如何在 Laravel 中找到公用文件夹?

Laravel5 如何从控制器访问公用文件夹

如何将 laravel 项目指向共享主机中 public_html 下的公用文件夹

如何从 Laravel 的公用文件夹中调用模型?

在 Laravel 中,如何获取公用文件夹中所有文件的列表?