【问题标题】:Deploying vue js app and getting 404 error in routes部署 vue js 应用程序并在路由中收到 404 错误
【发布时间】:2018-02-12 17:58:58
【问题描述】:

我正在使用简单的 webpack,但是在将我的应用程序部署到托管服务器后,我的索引页面工作正常,但其他页面出现 404 错误。请我不知道是否有人知道发生了什么。简单的 webpack 仅生成构建js 文件,仅此而已,我的 dist 文件夹中没有 index.htm 文件c

【问题讨论】:

  • 您应该将项目根目录中的index.htmldist 文件夹复制到服务器的根目录中。提供的index.html 已经链接到/dist/build.js

标签: vue.js


【解决方案1】:

我将向你展示如何做到这一点,但在阅读之前this from vue.js docs

第 1 步 运行以下命令

npm run build

第 2 步 复制 dist 文件夹并放到一个新文件夹中

第 3 步 在新文件夹中创建一个新文件并将其命名为 .htaccess

第 4 步 在 .htaccess 文件中插入以下代码

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

现在您的应用程序已准备好部署!您甚至可以在本地机器上使用 apache 运行它。

请再次阅读docs,您可以在那里找到更多关于 nginx、node.js 的配置,并了解有关所有服务器配置的更多信息。

附加信息:我正在使用 laragon + apache,在第 4 步之后,我将新文件夹放在 Laragon 的 www 目录中,并与 Laragon 一起提供。我想您可以通过使用 xampp 或 wamp 将新文件夹放在 docs 目录中来做同样的事情。

【讨论】:

  • 你如何在 nginx 中做到这一点?
  • 如果我使用 Firebase 托管会怎样
【解决方案2】:

这是由于你的 vue 路由器上的历史推送模式。

如果您使用 Apache,请按照以下步骤操作,否则您可以阅读 vuejs 文档https://router.vuejs.org/guide/essentials/history-mode.html

如果 Apache 版本高于 2.2,您可以在 apache 配置中使用 Fallback ressource 而不是 mod_rewrite。它对我有用。

在 /etc/apache2/apache2.conf 中

<VirtualHost *:80>
    ServerName YourServerName(like yourwebsite.com)
    DocumentRoot /var/www/yourAppLocation/dist
    <Directory "/var/www/yourAppLocation/dist">
        FallbackResource /index.html
    </Directory>
</VirtualHost>

或者你可以使用经典的 mod_rewrite

<VirtualHost *:80>
    ServerName YourServerName(like yourwebsite.com)
    DocumentRoot /var/www/yourAppLocation/dist
    <Directory "/var/www/yourAppLocation/dist">
        <IfModule mod_rewrite.c>
           RewriteEngine On
           RewriteBase /
           RewriteRule ^index\.html$ - [L]
           RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
           RewriteRule . /index.html [L]
        </IfModule>
    </Directory>
</VirtualHost>

【讨论】:

    【解决方案3】:

    您需要将您的主机设置为将每个 404 错误路由到 index.html 并让 vue 处理错误,您使用的是哪个主机?如果您无法设置错误页面,您可以从路由器中删除mode:'history' 模式或改用hash 模式,here is the official docs to how to setup your host,至于您的index.html,您可以在项目根目录中找到它,而不是在dist 文件夹中

    【讨论】:

    • 是的,谢谢,我一直得到这个作为人们的答案。但我不知道如何配置我的托管服务器来做到这一点。请注意,我正在使用简单的 webpack,我没有得到任何文件我的 dist 文件夹,除了 build.js 和 build.js.map。
    • 您的项目根目录中有一个索引文件,如you can see it in github template page,您需要将索引文件和dist文件夹复制到您的主机,顺便说一句您使用的是什么主机?他们应该提供一种自定义错误页面的方法
    • 是的,我可以在根文件夹中找到一个索引文件。 dist 文件夹和索引文件以及 src、node 模块等其他文件位于托管服务器的 public_html 文件夹中。我正在使用 whogohost 作为托管服务器。
    • hmm,这将是一个漫长的过程,为了方便起见,只需在路由器中使用hash 模式,然后构建应用程序并将其重新上传到您的托管服务提供商。使用哈希模式不需要任何托管自定义。
    • 我的路线采用这种形式“webaddress.com/about”,所以它仍然会给出 404 错误,但直到我手动添加“#/”以便它可以采用这种形式“webaddress.com/” #/about" 然后就可以了
    猜你喜欢
    • 2019-07-08
    • 2021-12-09
    • 2016-05-01
    • 2022-12-25
    • 2022-07-30
    • 1970-01-01
    • 2020-04-15
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多