nginx 404页面找不到了

xvw2m8pv  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(172)

我有一个Vue SPA,在我的本地主机上,当我通过npm运行serve启动项目并尝试访问一个我没有定义的路由时,我会进入404,这是我的vue路由器配置

{
    path: '/',
    name: 'MainLayout',
    component: () => import('../layouts/MainLayout.vue'),
    meta: {
        middleware: 'translation'
    },
    children: [
        {
            path: '',
            name: 'Index',
            component: () => import('@/application/views/Index.vue')
        },
       // other routes
        {
            path: '/:catchAll(.*)',
            component: import('@/application/views/404Page.vue'),
            name: 'NotFound'
        }
    ]
},

字符串
在我的服务器上,我使用nginx与此配置,它没有,但我可以看到或在我的MainLayout中定义的组件

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}


MainLayout.vue

<div class='w-full min-h-screen'>
    <Header class="flex-shrink-0"/>
    <router-view class="flex-grow"/>
    <Footer class="flex-shrink-0"/>
  </div>
</template>


我在nginx conf文件中尝试了此配置,但不起作用

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    access_log /var/log/nginx/application_access.log;
    error_log /var/log/nginx/application_error.log;

    location / {
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    error_page 404 /index.html;
    location = /index.html {
        root /usr/share/nginx/html;
        internal;
    }
}

js81xvg6

js81xvg61#

你必须选择前端路由(vue-router)或后端路由(nginx)。
通过你的配置,Nginx会在第一次点击时将所有内容重定向到index.html。
然后你使用一个带有catchAll路由的前端路由器,这样路由就完全在你的浏览器内完成了。在第一次命中后,Nginx永远不会被查询。
如果你想让nginx处理404,你必须从你的前端路由中删除catchAll(但这将是无用的,因为404再次使用index.html)。

相关问题