如何在cpanel上部署nextjs应用程序?

时间:2020-01-31 16:45:00

标签: reactjs .htaccess deployment cpanel next.js

我按照以下步骤在cPanel上部署了nextjs。

  1. 转到package.json并添加以下行:"homepage": "http://afsanefadaei.ir"

  2. 运行next build.next文件夹作为我的构建文件夹

  3. 转到cpanel >> file manager >> public_html文件夹并将.next文件夹的内容上传到此目录

  4. 添加或编辑以下文件:.htaccess至:

    enter image description here

但是当我访问该网站时,我会面对:

enter image description here

你知道这是怎么回事吗?

4 个答案:

答案 0 :(得分:5)

我将out文件夹(通过npm run build && npm run export生成)上传到public_html并创建了.htaccess文件,如

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteRule ^index.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-L
  RewriteRule . /index.html [L]

</IfModule>

对我有用?

问题:当我在另一条路线上刷新页面时,例如说/about,它带来了index.js页面的内容,但是URL不会更改为/

答案 1 :(得分:2)

  1. 您的WITH RECURSIVE cte (id, name, parent_id, dir) AS ( SELECT id, name, parent_id, cast(null as char(10)) as dir FROM organization WHERE id = 1 UNION SELECT t1.id, t1.name, t1.parent_id, ifnull(t2.dir, 'down') FROM organization t1 INNER JOIN cte t2 ON t1.parent_id = t2.id and ifnull(t2.dir, 'down')='down' UNION SELECT t1.id, t1.name, t1.parent_id, ifnull(t2.dir, 'up') FROM organization t1 INNER JOIN cte t2 ON t2.parent_id = t1.id and ifnull(t2.dir, 'up')='up' ) SELECT id, name, parent_id FROM cte; 没有index.html文件。
  2. 似乎您拥有服务器端(主要使用nodejs),但不幸的是您无法从cpanel运行该服务器端。
  3. 据我所知,如果您倾向于只使用前端,则应该使用.next而不是next export

但是最重要的是数字1,请确保next build文件夹中有index.html

答案 2 :(得分:0)

将其部署为NodeJS应用程序。

答案 3 :(得分:0)

我可以使用上述答案之一托管应用程序,但是当我刷新页面时,应用程序将崩溃或转到初始路由。

我就是这样解决这个问题的(解决方案取自next.js官网)。

  1. 使用 npm run build
  2. 生成 next.js 应用程序
  3. 在根文件夹中创建一个启动文件app.js并复制以下代码

const {
  createServer
} = require("http");
const {
  parse
} = require("url");
const next = require("next");

const port = process.env.PORT || 3000;

// Create the Express-Next App
const app = next({
  dev:false
});
const handle = app.getRequestHandler();

app
  .prepare()
  .then(() => {
    createServer((req, res) => {
      const parsedUrl = parse(req.url, true);
      const {
        pathname,
        query
      } = parsedUrl;
      handle(req, res, parsedUrl);
      console.log("pathname", pathname);
    }).listen(port, (err) => {
      if (err) throw err;
      console.log(`> Ready on http://localhost:${port}`);
    });
  })
  .catch((ex) => {
    console.error(ex.stack);
    process.exit(1);
  });

  1. 在 cPanel 上创建一个 Node.js 应用程序并添加应用程序启动文件名 enter image description here

  2. 然后启动应用程序。大功告成!

有关更多信息,请查看 Next.js Custom Server

的官方文档