# .htaccess for Laravel on cPanel - Root Directory # This file should be placed in your root directory (public_html) RewriteEngine On # CRITICAL: Handle assets FIRST - Direct access to public/assets/ RewriteCond %{REQUEST_URI} ^/assets/(.*)$ RewriteCond %{DOCUMENT_ROOT}/public/assets/%1 -f RewriteRule ^assets/(.*)$ public/assets/$1 [L] # Handle favicon and robots.txt RewriteCond %{REQUEST_URI} ^/(favicon\.ico|robots\.txt)$ RewriteCond %{DOCUMENT_ROOT}/public/$1 -f RewriteRule ^(.*)$ public/$1 [L] # Handle root requests - redirect to public/index.php RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^(.*)$ public/index.php [L] # Handle Laravel routes (everything else) RewriteCond %{REQUEST_URI} !^/public/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ public/index.php [QSA,L] # Set correct MIME types for assets AddType text/css .css AddType application/javascript .js AddType image/png .png AddType image/jpeg .jpg AddType image/jpeg .jpeg AddType image/gif .gif AddType image/svg+xml .svg AddType font/woff .woff AddType font/woff2 .woff2 AddType image/x-icon .ico # Prevent direct access to Laravel directories RedirectMatch 403 ^/app/ RedirectMatch 403 ^/bootstrap/ RedirectMatch 403 ^/config/ RedirectMatch 403 ^/database/ RedirectMatch 403 ^/resources/ RedirectMatch 403 ^/routes/ RedirectMatch 403 ^/storage/ RedirectMatch 403 ^/tests/ RedirectMatch 403 ^/vendor/ # Security Headers Header always set X-Content-Type-Options nosniff Header always set X-Frame-Options SAMEORIGIN Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "strict-origin-when-cross-origin" # Disable directory browsing Options -Indexes # Protect sensitive files Order allow,deny Deny from all # Cache static assets ExpiresActive On ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType font/woff "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year" # Compress files AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/json