<IfModule mod_mime.c>
 # AVIF: نسخهٔ سبک‌ترِ تصویرها. اگر Apache نوع فایل را نداند، مرورگر ممکن است
 # آن را نپذیرد؛ این دو خط نوع درست را اعلام می‌کند.
 AddType image/avif .avif
 AddType image/webp .webp
 AddType font/woff2 .woff2
</IfModule>

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On
    # Uploaded files are data, never executable documents.
    RewriteRule ^storage/.*\.(?:php[0-9]*|phtml|pht|phar|cgi|pl|shtml|html?|xhtml?|svgz?|xml|xsl|xslt|js|mjs)(?:[./]|$) - [F,L,NC]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Handle X-XSRF-Token Header
    RewriteCond %{HTTP:x-xsrf-token} .
    RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

<FilesMatch "^\.|\.(?:sql|sqlite|log|bak|zip)$">
    Require all denied
</FilesMatch>

# Cache only static assets; never cache account, cart, OAuth or checkout responses.
# ── انتقال اجباری به HTTPS (اختیاری) ───────────────────────────────────────
# به‌صورت پیش‌فرض خاموش است؛ در نسخهٔ فعلی، خودِ برنامه این کار را می‌کند و
# از پنل «تنظیمات ← امنیت سایت» قابل کنترل است (بدون هیچ ترمینالی).
# اگر خواستید حتی فایل‌های ایستا هم از HTTP منتقل شوند، دو خط زیر را از حالت
# توضیح خارج کنید (فقط وقتی مطمئنید گواهی SSL روی دامنه نصب شده است).
# <IfModule mod_rewrite.c>
#  RewriteEngine On
#  RewriteCond %{HTTPS} !=on
#  RewriteCond %{HTTP:X-Forwarded-Proto} !https
#  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# </IfModule>

<IfModule mod_headers.c>
 <FilesMatch "\.(?:css|js|woff2?|avif|webp|png|jpe?g|svg|ico)$">
  Header set Cache-Control "public, max-age=604800"
 </FilesMatch>
 <FilesMatch "\.(?:woff2|webp|avif)$">
  Header set Cache-Control "public, max-age=31536000, immutable"
 </FilesMatch>
 # فایل‌های Vite نامِ هش‌دار دارند؛ برای همیشه کش شوند.
 <If "%{REQUEST_URI} =~ m#^/assets/#">
  Header set Cache-Control "public, max-age=31536000, immutable"
 </If>
 # نکته (دور ۲۲): هدرهای امنیتی از خودِ PHP فرستاده می‌شوند
 # (app/Http/Middleware/SecurityHeaders.php). اگر اینجا هم ست شوند، مرورگر دو
 # نسخهٔ تکراری می‌گیرد و گزارش‌های امنیتی آن را ایراد می‌شمارند — پس اینجا
 # تکرار نشده‌اند. فقط برای فایل‌های ایستا (که PHP نمی‌بیند) امن‌سازی حداقلی:
 Header setifempty Vary "Accept-Encoding"
 # نسخهٔ PHP را لو نده (اطلاعات کمکی برای مهاجم است)
 Header unset X-Powered-By
 <FilesMatch "\.(?:css|js|woff2?|avif|webp|png|jpe?g|svg|ico)$">
  Header set X-Content-Type-Options "nosniff"
 </FilesMatch>
</IfModule>
# فشرده‌سازی: HTML و JSON و XML هم اضافه شده‌اند تا حجم صفحه‌ها کم شود.
<IfModule mod_deflate.c>
 AddOutputFilterByType DEFLATE text/plain text/html text/css text/xml text/javascript
 AddOutputFilterByType DEFLATE application/javascript application/json application/xml
 AddOutputFilterByType DEFLATE application/rss+xml application/ld+json image/svg+xml
 <IfModule mod_brotli.c>
  AddOutputFilterByType BROTLI_COMPRESS text/html text/css text/plain text/javascript
  AddOutputFilterByType BROTLI_COMPRESS application/javascript application/json application/xml image/svg+xml
 </IfModule>
</IfModule>
<IfModule mod_expires.c>
 ExpiresActive On
 ExpiresByType font/woff2 "access plus 1 year"
 ExpiresByType image/webp "access plus 1 year"
 ExpiresByType image/avif "access plus 1 year"
 ExpiresByType image/svg+xml "access plus 1 month"
 ExpiresByType text/css "access plus 7 days"
 ExpiresByType application/javascript "access plus 7 days"
</IfModule>
