# ─────────────────────────────────────────────────────────────────────────────
#  avatoys — front controller for cPanel / public_html
#
#  این فایل برای حالتی است که دامنه روی خودِ پوشهٔ public_html تنظیم شده است.
#  فایل‌های عمومی برنامه داخل پوشهٔ public/ هستند و همهٔ درخواست‌های واقعی
#  به public/index.php می‌رسند. اگر Document Root را روی public گذاشتید،
#  همین فایل بی‌اثر می‌شود و public/.htaccess کار می‌کند.
#
#  این فایل عمداً فقط به mod_rewrite وابسته است؛ هیچ Options/Require/php_value
#  ندارد تا روی هاست‌هایی با AllowOverride محدود هم خطای 500 نسازد.
# ─────────────────────────────────────────────────────────────────────────────
DirectoryIndex index.php

<IfModule mod_rewrite.c>
    RewriteEngine On

    # تمدید گواهی SSL خودکار cPanel باید آزاد بماند
    RewriteRule ^\.well-known/acme-challenge/ - [L]

    # فایل‌های مخفی (از جمله .env، .htaccess، .user.ini) هرگز سرو نشوند
    RewriteRule (^|/)\.(?!well-known/) - [F,L]

    # فایل‌های داده، بکاپ و مجوز
    RewriteRule (^|/)\.env(?:\..*)?$ - [F,L,NC]
    RewriteRule \.(?:log|sql|sqlite|bak|zip|tar|gz|tgz|rar|7z|ini|sh|lock|pem|key)$ - [F,L,NC]

    # کد، تنظیمات و ابزارهای داخلی برنامه
    RewriteRule ^(?:app|bootstrap|config|database|resources|routes|tests|vendor|node_modules|deploy|docs|qa|scripts|tools|lang|joda)(?:/|$) - [F,L,NC]
    RewriteRule ^(?:artisan|composer\.(?:json|lock)|package(?:-lock)?\.json|phpunit(?:-mysql)?\.xml|vite\.config\.js|tailwind\.config\.js|postcss\.config\.js|README\.md|INSTALL\.md|router\.php)$ - [F,L,NC]

    # پوشه‌های خصوصی داخل storage (فایل‌های عمومی آپلود در storage/app/public هستند
    # و از مسیر /storage/... یا public/storage سرو می‌شوند)
    RewriteRule ^storage/(?:app/private|framework|logs)(?:/|$) - [F,L,NC]

    # Uploaded files must never be executed, including through /public/storage.
    RewriteRule ^(?:public/)?storage/.*\.(?:php[0-9]*|phtml|pht|phar|cgi|pl|shtml|html?|xhtml?|svgz?|xml|xsl|xslt|js|mjs)(?:[./]|$) - [F,L,NC]

    # فایل‌های عمومی واقعی: /build، /css، /js، /fonts، /images، /assets و ...
    RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
    RewriteRule ^(.*)$ public/$1 [L]

    # تصاویر آپلودی: اگر symlink ساخته شده باشد مستقیم، وگرنه از مسیر امن برنامه
    RewriteCond %{DOCUMENT_ROOT}/public/storage/$1 -f
    RewriteRule ^storage/(.*)$ public/storage/$1 [L]
    RewriteRule ^storage/(.*)$ public/index.php [L]

    # همهٔ مسیرهای دیگر به فرانت‌کنترلر
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ public/index.php [L]
</IfModule>

# اگر mod_rewrite روی هاست فعال نبود:
#   • صفحهٔ http://YOUR-DOMAIN/hosting-check.php همیشه کار می‌کند (بدون Laravel).
#   • فایل index.php ریشه، نصب‌کننده را روی آدرس اصلی بالا می‌آورد.
#   • برای زیبایی آدرس‌ها و فایل‌های CSS/JS از پشتیبانی هاست بخواهید mod_rewrite
#     و AllowOverride All را فعال کند.

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml application/xml application/rss+xml application/javascript text/javascript image/svg+xml application/json application/manifest+json
</IfModule>
# Brotli (اگر هاست پشتیبانی کند، حدود ۲۰٪ کوچک‌تر از gzip)
<IfModule mod_brotli.c>
    AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/xml application/xml application/javascript text/javascript image/svg+xml application/json
</IfModule>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/webp "access plus 30 days"
    ExpiresByType image/png "access plus 30 days"
    ExpiresByType image/jpeg "access plus 30 days"
    ExpiresByType image/svg+xml "access plus 30 days"
    ExpiresByType font/woff2 "access plus 365 days"
    ExpiresByType text/css "access plus 7 days"
    ExpiresByType application/javascript "access plus 7 days"
</IfModule>

# نشانی /public/... هم کار می‌کند (فایل‌های عمومی همین‌جا هستند)؛ در لینک‌ها
# و سئو از نشانی بدون /public استفاده می‌شود. برای جلوگیری از محتوای تکراری
# می‌توانید در cPanel یک Redirect بسازید، اما هیچ چیز به آن وابسته نیست.
