How to Deploy Laravel 12 with ReactJS (Vite) on Shared Hosting — A Beginner’s Guide

Author

Kritim Yantra

Jun 17, 2025

How to Deploy Laravel 12 with ReactJS (Vite) on Shared Hosting — A Beginner’s Guide

Are you building a Laravel 12 backend with a beautiful ReactJS frontend using Vite, and now scratching your head thinking:

“How do I deploy this on a shared hosting server like Hostinger, Namecheap, or GoDaddy?”

You’re not alone.

Deploying full-stack apps on shared hosting can be tricky, especially when combining Laravel (PHP) and ReactJS (JavaScript). But don’t worry — this guide will walk you through step-by-step, in plain English.


🧰 What You’ll Need

Before we dive in, here’s what you’ll need:

  • ✅ A Laravel 12 app using ReactJS frontend with Vite
  • ✅ Access to a shared hosting account (cPanel or FTP)
  • ✅ Basic understanding of terminal/CLI and file structure
  • ✅ PHP 8.2+ support on hosting

🗺️ Deployment Roadmap

We’ll cover:

  1. 🏗️ Building React for production
  2. 🛠️ Configuring Laravel to load React
  3. 📁 Organizing files for shared hosting
  4. ️ Updating .env, index.php, and .htaccess
  5. ✅ Final testing

🏗️ Step 1: Build Your React Frontend with Vite

Make sure you have React installed inside your Laravel app (usually in resources/js or resources/react).

Run this in your terminal:

npm run build

By default, Vite will output static files into:

public/build/

But you can customize the output directory in vite.config.js like this:

export default defineConfig({
  plugins: [react()],
  build: {
    outDir: 'public/react',
    emptyOutDir: true
  }
});

Now your production-ready React app is inside:

public/react/
├── index.html
├── assets/
├── js/
├── css/

🛠️ Step 2: Serve React App from Laravel

Add a fallback route in your routes/web.php:

use Illuminate\Support\Facades\Route;

Route::get('/{any}', function () {
    return file_get_contents(public_path('react/index.html'));
})->where('any', '.*');

✅ This ensures that all unmatched routes are served by index.html, so React Router can handle them — perfect for SPAs.


📁 Step 3: Upload Files to Shared Hosting

Shared hosting usually places web files under public_html/.

🔧 Folder Structure

Here’s how to organize it:

public_html/
├── index.php                  <-- Laravel's public/index.php
├── react/                     <-- Your React Vite build
├── js/, css/, assets/         <-- Auto-generated by Vite
├── your-laravel-project/
│   ├── app/
│   ├── bootstrap/
│   ├── routes/
│   ├── vendor/

Important: Move Laravel core files out of public_html if your hosting allows it. Otherwise, nest them properly and update index.php.


📝 Step 4: Configure Laravel and Hosting

✅ Update .env for Production

Set appropriate values in .env:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com

Run the optimizers:

php artisan config:cache
php artisan route:cache
php artisan view:cache

🔐 Set Permissions

Ensure storage/ and bootstrap/cache/ are writable:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

You can do this via cPanel File Manager or SSH if allowed.


🪄 Step 5: Tweak .htaccess for Routing

Inside public_html/.htaccess, make sure you have:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Redirect everything to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
</IfModule>

This enables clean URLs and allows both Laravel and React routes to work smoothly.


🎨 Bonus: Sample React index.html

Here’s what your React-built index.html in public/react/ might look like:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>React App</title>
    <link rel="stylesheet" href="/react/assets/app.css">
    <script type="module" src="/react/assets/app.js"></script>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

✅ Make sure paths like /react/assets/... are correctly prefixed.


📌 Final Checklist

✅ Task Status
npm run build done for React
Route fallback to React index.html
Laravel files uploaded
public/ contents in public_html/
.env configured
storage/ permissions set
.htaccess updated

🧠 Key Takeaways

  • React with Vite works great with Laravel, even on shared hosting
  • SPA routing needs fallback to index.html
  • Clean organization in public_html is critical
  • vite.config.js should direct output to a known public folder
  • .htaccess and correct asset paths make or break your app
LIVE MENTORSHIP ONLY 5 SPOTS

Laravel Mastery
Coaching Class Program

KritiMyantra

Transform from beginner to Laravel expert with our personalized Coaching Class starting June 24, 2025. Limited enrollment ensures focused attention.

Daily Sessions

1-hour personalized coaching

Real Projects

Build portfolio applications

Best Practices

Industry-standard techniques

Career Support

Interview prep & job guidance

Total Investment
$200
Duration
30 hours
1h/day

Enrollment Closes In

Days
Hours
Minutes
Seconds
Spots Available 5 of 10 remaining
Next cohort starts:
June 24, 2025

Join the Program

Complete your application to secure your spot

Application Submitted!

Thank you for your interest in our Laravel mentorship program. We'll contact you within 24 hours with next steps.

What happens next?

  • Confirmation email with program details
  • WhatsApp message from our team
  • Onboarding call to discuss your goals

Tags

Comments

No comments yet. Be the first to comment!

Please log in to post a comment:

Sign in with Google

Related Posts