How do I upload a laravel project on cPanel shared hosting?

42,511

Solution 1

Assuming the cpanel has no other website and your laravel project is supposed to be the default project.

  1. Zip your entire Laravel project and export your DB to sql
  2. Login to cPanel and navigate to File Manager
  3. Ensure you're in the root folder, then click "Upload"
  4. Select your zip file and wait for upload to complete
  5. Unzip the uploaded file
  6. Move the content of public to public_html folder
  7. Go back to Cpanel and navigate to Databases
  8. Created a database and add (create if non exist) a DB user
  9. Click on your fresh DB, and click "Import"
  10. Select your exported SQL file
  11. Try to access your laravel website using the domain url

This website might provide more details https://dev.to/asapabedi/deploying-laravel-5-applications-on-shared-hosting-without-the-use-of-ssh--16a6

Solution 2

AS OF MAY 2020 LARAVEL 7.0

This is what worked for me:

  1. Update the php version of cpanel to the requirements of laravel version say laravel 7.0 needs https://laravel.com/docs/7.x/installation

  2. Check that all required extensions are installed

  3. Then if you are having problems with .htacess, I recommend that you test by..
    creating a simple index.html
    just add a line like

    Hello World

    then zip all files in your public_html (including the .htaccess) and upload the index.html
    refresh the target url say domain.com
    when it works you are ready for the next step
    (if it doesn't try debugging / finding out why)
  4. Upload your database (assuming its already exported) by...
    Go to MySQL Databases
    create a database with the exact name of your database to be added
    then create a MySQL user and give him all priviledges to the database
    Go to phpmyadmin in cpanel and import the exported sql file

  5. Zip your working laravel project and upload it to the home folder

  6. In cpanel extract and...
    PLEASE NOTE:
    place all folders in the home
    pick contents of public including .htaccess to public_html

THE FOLDER AND FILE STRUCTURE SHOULD BE THE SAME AS YOUR LARAVEL PROJECT ON YOUR COMPUTER (except public is now public_html)

WARNING: DON'T TOUCH YOUR index.php or server.php

  1. Make hidden files visible in your cpanel then finally edit the .env file by...
    Only editing DB username and password (I expect the DB name to be the same)
    Also you want to leave APP_DEBUG as true for testing (YOU MUST TEST)
    When all is well change it to false

  2. If you have no database, what are waiting for refresh already
    Though even with a Database NOWS THE TIME refresh

Solution 3

follow these steps:

  1. check .htaccess file on root or subdomain.
  2. if move files of public to root => change index.php contents /../ to /

e.g

require DIR.'/../vendor/autoload.php';

TO

require DIR.'/vendor/autoload.php';

AND

$app = require_once DIR.'/../bootstrap/app.php';

TO

$app = require_once DIR.'/bootstrap/app.php';

  1. check the php version (on laravel 6+ i used php7.4 and problem solved)
  2. check .env file

Solution 4

You don't need to make changes to the structure of Laravel. Just copy below htaccess code and paste in .htaccess file at the root of your laravel project.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^$ public/index.php [L]
    RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
</IfModule>

Solution 5

If you are using an Apache server you can do the following simple step

Step 1: just upload your all source code on the server (make sure database & .env set well) i) make zip and extract it ii) deploy code using git or take a clone from a repository and install all dependencies

Step 2: Make a .htaccess file on the project root directory and copy below code and paste it into this file.

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

I get this answer from this video so please say thanks to him https://www.youtube.com/watch?v=6Qbd9HTh7AE (Thank you)

Share:
42,511
jr3000
Author by

jr3000

I am really enthusiast about computer programming. I have a grade 1 in information technology CSEC level and a grade 3 in computer science CAPE level. I am on the verge of earning my degree in computer science. I really like web development and database programming language such as MySQL. In the future i hope to become a successful computer programmer with cutting edge experience in web development and mobile applications.

Updated on July 10, 2022

Comments

  • jr3000
    jr3000 almost 2 years

    I am uploading a simple subscription page for my website using cPanel. I uploaded the files to public_html, moved the files from public folder and modify index.php so it points to the application. The PHP version I used to code this application is 7.3 but I had to select the 7.2 version in the host because that was the latest available.

    When I load my website I get this error "This page isn’t working bazzaar.net is currently unable to handle this request. HTTP ERROR 500"

    When I remove everything from the index.php file and add a simple echo the page loads.

    I really need HELP with this. the error logs are below:

    Stack trace:

    #0 /home3/bazzaar/public_html/vendor/symfony/http-foundation/Response.php(198): Symfony\Component\HttpFoundation\Response->setStatusCode(500)
    #1 /home3/bazzaar/public_html/vendor/symfony/http-foundation/Response.php(214): Symfony\Component\HttpFoundation\Response->__construct('<!doctype html>...', 500, Array)
    #2 /home3/bazzaar/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(328): Symfony\Component\HttpFoundation\Response::create('<!doctype html>...', 500, Array)
    #3 /home3/bazzaar/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(305): Illuminate\Foundation\Exceptions\Handler->convertExceptionToResponse(Object(Symfony\Component\Er in /home3/bazzaar/public_html/vendor/symfony/http-foundation/Response.php on line 450
    

    my .htacess file

    suPHP_ConfigPath /opt/php72/lib

    Options -MultiViews -Indexes

    RewriteEngine On
    
    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]
    
    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    

    # Use PHP72 as default