# ============================================================
# Diaspora Concierge Platform — Root .htaccess
# ============================================================

Options -Indexes
ServerSignature Off

# ── Force HTTPS ─────────────────────────────────────────────
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ── Front Controller: route all traffic through index.php ───
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

# ── Block direct access to sensitive directories ────────────
RewriteRule ^(app|config|database|vendor)(/|$) - [F,L]

# ── Block access to dot-files (.env, .git, etc.) ────────────
RewriteRule (^|/)\.  - [F,L]

# ── Block PHP execution inside uploads directory ────────────
RewriteRule ^assets/uploads/.*\.(php|php5|phtml|pl|py|cgi|sh)$ - [F,NC,L]

# ── Security Headers ────────────────────────────────────────
<IfModule mod_headers.c>
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    # Tight CSP — adjust for CDN use
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.tailwindcss.com https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdn.tailwindcss.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self';"
</IfModule>

# ── Compression ─────────────────────────────────────────────
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css text/javascript
    AddOutputFilterByType DEFLATE application/javascript application/json
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

# ── Browser Caching ─────────────────────────────────────────
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css             "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType image/jpeg           "access plus 1 year"
    ExpiresByType image/png            "access plus 1 year"
    ExpiresByType image/webp           "access plus 1 year"
    ExpiresByType image/svg+xml        "access plus 1 month"
    ExpiresByType application/pdf      "access plus 1 month"
</IfModule>

# ── Block common exploit scanners ────────────────────────────
<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
    RewriteRule .* - [F,L]
</IfModule>
