skip to Main Content

I followed these steps to deploy my nextjs on cPanel.

  1. go to package.json and add this line: "homepage": "http://afsanefadaei.ir"

  2. run next build to have .next folder as my build folder

  3. go to cpanel >> file manager >> public_html folder and upload the contetn of .next folder to this directory

  4. add or edit this file: .htaccess to:

    enter image description here

but when I go to the website I face this:

enter image description here

Do you know what is wrong with this?

5

Answers


    1. Your .next doesn’t have index.html file.
    2. Seems like you have server side (mostly using nodejs), but unfortunately you couldn’t run that server side from cpanel.
    3. As I know, you should use next export instead of next build if you tend to have frontend side only.

    But the most important thing is number 1, make sure you have index.html inside your .next folder.

    Login or Signup to reply.
  1. I uploaded out (which gets generated doing npm run build && npm run export) folder to public_html and created .htaccess file like

    <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>
    

    It worked for me 😁

    Problem: When I refresh the page on some different route let’s say /about, it brings the index.js page contents but URL doesn’t change to /

    Login or Signup to reply.
  2. Deploy it as a NodeJS application.

    Login or Signup to reply.
  3. I could host the application with one of the above answers, but when I refresh the page the application will crash or go to initial route.

    This is how I solved this problem (solution taken from next.js official site).

    1. Take production build of next.js application using npm run build
    2. create a startup file app.js in the root folder and copy the following code
    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. Create a Node.js Application on cPanel and add Application Startup File name
      enter image description here

    2. And start the application. You are done !

    For further information check out the official docs of Next.js Custom Server

    Login or Signup to reply.
  4. Here is a complete .htaccess for implementing a Node.js application with an Apache redirect. This works very well on cPanel if you have your NextJS app deployed with the next start server (listening on a specific port).

    RewriteEngine On
    
    # Need to disable DirectoryIndex to avoid rewriting directory URL to index.html
    DirectoryIndex disabled
    
    # Redirect home page request to the NextJS server
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule ^(.*)$ http://127.0.0.1:4002/ [P,L]
    
    # Redirect all other requests to the NextJS server with the URI appended
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ http://127.0.0.1:4002/$1 [P,L]
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search