nginx 404页面找不到了

xvw2m8pv  于 2024-01-06  发布在  Nginx
关注(0)|答案(1)|浏览(285)

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

  1. {
  2. path: '/',
  3. name: 'MainLayout',
  4. component: () => import('../layouts/MainLayout.vue'),
  5. meta: {
  6. middleware: 'translation'
  7. },
  8. children: [
  9. {
  10. path: '',
  11. name: 'Index',
  12. component: () => import('@/application/views/Index.vue')
  13. },
  14. // other routes
  15. {
  16. path: '/:catchAll(.*)',
  17. component: import('@/application/views/404Page.vue'),
  18. name: 'NotFound'
  19. }
  20. ]
  21. },

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

  1. server {
  2. listen 80;
  3. return 301 https://$host$request_uri;
  4. }
  5. server {
  6. listen 443 ssl;
  7. server_name example.com;
  8. ssl_certificate /etc/nginx/certs/fullchain.pem;
  9. ssl_certificate_key /etc/nginx/certs/privkey.pem;
  10. location / {
  11. root /usr/share/nginx/html;
  12. index index.html;
  13. try_files $uri $uri/ /index.html;
  14. }
  15. }


MainLayout.vue

  1. <div class='w-full min-h-screen'>
  2. <Header class="flex-shrink-0"/>
  3. <router-view class="flex-grow"/>
  4. <Footer class="flex-shrink-0"/>
  5. </div>
  6. </template>


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

  1. server {
  2. listen 80;
  3. return 301 https://$host$request_uri;
  4. }
  5. server {
  6. listen 443 ssl;
  7. server_name example.com;
  8. ssl_certificate /etc/nginx/certs/fullchain.pem;
  9. ssl_certificate_key /etc/nginx/certs/privkey.pem;
  10. access_log /var/log/nginx/application_access.log;
  11. error_log /var/log/nginx/application_error.log;
  12. location / {
  13. root /usr/share/nginx/html;
  14. index index.html;
  15. try_files $uri $uri/ /index.html;
  16. }
  17. error_page 404 /index.html;
  18. location = /index.html {
  19. root /usr/share/nginx/html;
  20. internal;
  21. }
  22. }

js81xvg6

js81xvg61#

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

相关问题