Add _redirect文件到Netlify上托管的Vue SPA的根路径

vsikbqxv  于 2023-05-23  发布在  Vue.js
关注(0)|答案(6)|浏览(202)

我正在使用Vue CLI开发一个单页应用程序,希望历史pushstate工作,这样我就可以得到干净的URL。
我必须遵循这一点:https://www.netlify.com/docs/redirects/#history-pushstate-and-single-page-apps并添加一个_redirects文件到我的站点文件夹的根目录,内容如下:

/*    /index.html   200

问题是我不知道如何将这个_redirects文件添加到dist文件夹的根目录。我试着把它添加到静态文件夹,但它最终在一个子文件夹,而不是在根目录。如何包含此文件,以便在Netlify上部署后历史记录模式正常工作?

// config/index.js
build: {
  // Paths
  assetsRoot: path.resolve(__dirname, '../dist'),
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
iyfjxgzm

iyfjxgzm1#

vue-cli创建了app 3.x

对于使用vue-cli版本3.0.0-beta.x的新构建设置,现在有一个公共文件夹,您不需要以下设置。只需将_redirects文件放在public根目录下。当您构建它时,它将复制到dist文件夹,该文件夹将用于您的部署。

vue-cli创建了3.x之前的应用

Vue.js使用webpack来复制静态资产。这是在webpack.prod.conf.js中维护的,用于生产构建,在本例中,Netlify将需要该构建。我认为最好和最干净的配置是based on this solution.
在文件中搜索webpack.prod.conf.js中的new CopyWebpackPlugin

// copy custom static assets
new CopyWebpackPlugin([
  {
    from: path.resolve(__dirname, '../static'),
    to: config.build.assetsSubDirectory,
    ignore: ['.*']
  }
])

**创建一个根目录(在项目中与静态文件夹相同级别的文件夹)**您可以为它命名任何您喜欢的名称,但我将使用root作为示例。

然后确保_redirects文件位于新的root目录中。在本例中,它被命名为root
现在修改webpack.prod.conf.js CopyWebpackPlugin部分,如下所示:

// copy custom static assets
new CopyWebpackPlugin([
  {
    from: path.resolve(__dirname, '../static'),
    to: config.build.assetsSubDirectory,
    ignore: ['.*']
  },
  {
    from: path.resolve(__dirname, '../root'),
    to: config.build.assetsRoot,
    ignore: ['.*']
  }
])
mzsu5hc0

mzsu5hc02#

你也可以只使用netlify.toml文件,它往往更干净一些。只需将此内容放入文件中即可获得您正在寻找的重定向:

# The following redirect is intended for use with most SPA's that handles routing internally.
[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

netlify.toml通常存储在站点存储库的根目录中。
您可以找到有关此文件here的更多信息。

vdzxcuhz

vdzxcuhz3#

我试过Rutger Willems的片段没有最后一行,它工作。这要归功于哈米什·莫法特。

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200
7kqas0il

7kqas0il4#

如果您在Nuxt而不是Vue上寻找答案,请将_redirects文件添加到static/目录中。

ccrfmcuu

ccrfmcuu5#

您只需将_redirects文件添加到vue应用程序中的/public目录中即可

ljo96ir5

ljo96ir56#

对于vue3(应该也适用于vue2)。结合以上和netlify网站的答案。对我有效的解决方案是使用netlify.toml文件
1.创建包含以下内容的netlify.toml文件。

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

1.将其放入public文件夹中。这应该在根目录中。
1.这将被复制到生产环境中的dist文件夹中。

相关问题