为啥我得到一个 404 到 laravel 5.7 公共子文件夹?

Posted

技术标签:

【中文标题】为啥我得到一个 404 到 laravel 5.7 公共子文件夹?【英文标题】:Why do I get a 404 to laravel 5.7 public subfolders?为什么我得到一个 404 到 laravel 5.7 公共子文件夹? 【发布时间】:2019-07-11 18:53:11 【问题描述】:

我有一个 Laravel 5.7 项目,但我似乎无法理解为什么我会在公共目录中的子文件夹中收到 404 错误

目录结构

公开 图标 CSS 文件.css

正常工作的路线示例:

localhost/images/image.png localhost/css/main.css

但是,当我尝试请求比第一个子目录更深的文件时,我得到一个 404。例如:

localhost/pugins/common/common.min.js

文件位于 public/pugins/common/common.min.js

localhost/icons/weather-icons/css/weather-icons.min.css

文件位于 public/icons/weather-icons/css/weather-icons.min.css

localhost/FOLDER/ 之后的任何内容都会出现 404 错误,即使它存在。

任何想法为什么?

这是默认的.htaccess 文件:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %HTTP:Authorization .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_URI (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]
</IfModule>

我刚才注意到公用文件夹的第一级子目录在尝试列出该目录时出现 403(禁止)错误。 示例:

localhost/js => 403,禁止 localhost/js/dashboard/intro-inde.js => 404,未找到 localhost/js/script.js => 200,工作正常

上面的例子中每个文件和目录都存在,权限没有问题。 我的猜测是它与.htaccess 有关,但我不知道它是如何工作的>.>

【问题讨论】:

检查目录/文件的所有者和权限 我在 localhost (wamp, windows) 上运行它。我忘了提这个。 这不是 htaccess,我有相同的 htaccess 文件,但在公共子文件夹中没有得到 404 【参考方案1】:

我记得我在以前的项目中使用 laravel 5.1 ~ 5.5 没有问题。所以我已经将 .htaccess 文件从这些项目复制到了这个。现在一切正常,但对于一个文件夹及其子文件夹:public/icons;我通过创建一个新文件夹并将所有内容从“icons”移动到 “fonts-icons”

解决了这个问题

看看新 .htaccess 的强大功能。也许它会帮助某人。

    <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_URI (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %HTTP:Authorization .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
</IfModule>

这个解决了问题...没有新的新路线。 :D 不过,我仍然不知道它是如何工作的以及为什么。

只是出于好奇,也许有人会启发我d=(^_^)=b

【讨论】:

【参考方案2】:

错误 404 是当我们找不到任何页面时。这意味着我们必须首先在我们的 web.php 文件中定义路由,以便查看写入到 Blade.php 文件中的所需内容,如果我们没有将文件保存在 .blade.php 扩展名中/p>

【讨论】:

【参考方案3】:

您应该首先在 routes/web.php 文件中定义该路由。

【讨论】:

有很多不同级别的子目录。我觉得应该有比为所有这些编写路线更好的方法......或者我错过了什么? :D 如果它们作为文件存在,您不需要为它们定义路由

以上是关于为啥我得到一个 404 到 laravel 5.7 公共子文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的路线返回 404 错误 Laravel?

为啥不能在 Laravel 5.7 中捕获我定义的 Route 请求的文件 URI?

Laravel 5.7 - 上传到公共文件夹

当我使用 ajax 发布请求时,为啥在我的 live laravel 项目中显示 404 和 405

Xampp的Laravel 404错误

在 AWS Elastic Beanstalk 上部署 Laravel 8 后得到 404