How to serve static files and folders in Laravel

How to serve static files and folders in Laravel

When working on localhost (localhost:8000), Laravel serves static files correctly. However, after deploying the project to a live server, static assets (CSS, JS, images) may not load properly. This can negatively impact:

Common Causes of Static Files Not Loading

Incorrect Server Configuration → Apache/Nginx may not be set up to serve Laravel’s public directory correctly.

Wrong File Paths → Static assets may be incorrectly referenced.

Missing .htaccess Rules → Laravel requires proper URL rewriting.

Incorrect Index File Configuration → index.php may need adjustments.


Solution: Update you index.php and .htaccess files

File: laravelproject/index.php 

<?php

use Illuminate\Http\Request;

define('LARAVEL_START', microtime(true));

// Determine if the application is in maintenance mode...
if (file_exists($maintenance = __DIR__ . '/storage/framework/maintenance.php')) {
    require $maintenance;
}

// Register the Composer autoloader...
require __DIR__ . '/vendor/autoload.php';

// Bootstrap Laravel and handle the request...
(require_once __DIR__ . '/bootstrap/app.php')
    ->handleRequest(Request::capture());


File: laravelproject/.htaccess


<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

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 ^ index.php [L]


Why this helps?

  • Redirects all requests to Laravel’s public/ directory.
  • Fixes issues with missing assets (CSS, JS, images).
  • Ensures Laravel routes work correctly after deployment.
Comments