使用Laravel 10时出现403禁止访问和404页面未找到

首先

我最初从 Laravel 10 入门,但是我发现在 Laravel 中,操作命令、语法和目录结构在不同版本中有一些差异。这次我将记录下我遇到的403和404错误的解决方案,作为备忘录。

不能被ChatGPT和网络文章欺骗。

ChatGPT提供的回答可能会混合了关于旧版本的内容。此外,对于没有明确标明版本的网络文章,应确认其是否适用于当前操作的版本,并进行执行。

欢迎页面出现403错误

问题是由于apache2的设置。必须的apache2设置是,AllowOverwride All 和启用mod-rewrite。

<Virtualhost *:80>
    ServerName *****
    DocumentRoot /home/user/project/public

    <Directory "/home/user/project/public">
        Options FollowSymLinks
        AllowOverwride All
        Reqire All granted
    </Directory>
</Virtualhost>
a2enmod rewrite

systemctl restart apache2

当你重新启动Apache服务器时,public文件夹中的htaccess文件应该会被执行,然后会显示欢迎页面。

尽管如此还是403的话

如果使用图像文件等,则需要在存储中创建链接。

php artisan storage:link
chmod -R 775 storage

chmod -R 775 bootstrap/cache

 

顺便赋予写入日志文件的权限会比较好。

chmod 777 storage/logs/laravel.log

如果无法更改DocumentRoot

使用Userdir来更改项目用户的公共目录。


    Userdir enabled
    Userdir disabled root appuser

<Directory /home/appuser/project/public>
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

登录页面出现了404错误

当访问”\login”时,尽管显示了欢迎页面,但却出现了404错误。这是由于资产构建方式和blade的描述方法与从网上找到的旧版本不同所致。

在 Laravel 10 中需要安装的是 nodejs 和 npm,使用 Vite 进行构建。
如果直接安装 nodejs,会安装一个旧版本,所以需要从存储库中添加。

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -

出现了一条警告,提示说以后不再支持上述的指令了,建议使用Git。由于我只在安装时使用这个指令,所以这次我直接执行了它。

apt update
apt install nodejs

这样就安装了Node.js和npm。使用最新的LTS版本的Node.js更好。(写这篇文章时,安装的是版本18。)

切换到创建项目的普通用户身份。在项目目录中执行以下操作。

exit
npm install

文件会自动创建。

用Vite做各种事情

在项目目录中有一个名为vite.config.js的文件,你可以编辑它,来描述要使用的css和js文件的路径。有多种不同的写法可以使用。

同样处理图像文件和js文件。这里只举例css文件。

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'resources/css/app.css',
                'resources/js/app.js',
            ],
            refresh: true,
        }),
    ],
});

将CSS文件放置在resources/css中,并执行以下操作。

npm run build

在public文件夹中创建了asset/css。JavaScript和CSS都变得像编译器一样。

View的描述

在@vite(“resources文件夹路径”)中进行描述。

<html>
    <head>
        <title>@yield('title')</title>
        @vite(resources/css/mycss.css)
    </head>

<body>
~ 以下略 ~

据说在以前的版本(可能是8之前的版本)中,如果想要写成类似{{ asset(‘css/mycss.css’) }}这样的格式。这有点儿复杂。好像是使用Laravel-mix而不是Vite…。

<link rel="stylesheet" href="{{ asset('resource/css/mycss.css') }}">

请看下面的资料

 

广告
将在 10 秒后关闭
bannerAds