# Disable directory listing Options -Indexes # Default directory index DirectoryIndex index.html # Serve index.html for SPA client-side routing (if file/dir doesn't exist) RewriteEngine On RewriteBase / # If the request is for an existing file or directory, serve it RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Otherwise rewrite to index.html RewriteRule ^ index.html [L] # Optional: small caching hints for static assets ExpiresActive On ExpiresByType text/css "access plus 1 week" # Keep JS cache short during development to avoid stale scripts on mobile ExpiresByType application/javascript "access plus 60 seconds" ExpiresByType image/* "access plus 1 week" # Add Cache-Control headers for more precise control Header set Cache-Control "max-age=60, public" Header set Cache-Control "max-age=604800, public" Header set Cache-Control "max-age=604800, public" # Prevent serving hidden files (like .env, .git) Require all denied