# Nex1on — правила для Apache.
# Для nginx образец настройки лежит в samples/nginx.conf.

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Сайт может стоять в подпапке — тогда RewriteBase подставит установщик.
    # RewriteBase /

    # Существующие файлы и папки отдаём как есть: картинки, стили, загрузки.
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    # Всё остальное — в единую точку входа.
    RewriteRule ^ index.php [L]
</IfModule>

# Без mod_rewrite движок работать не будет — скажем об этом прямо,
# а не белым экраном.
<IfModule !mod_rewrite.c>
    ErrorDocument 404 "Nex1on: на сервере не включён mod_rewrite."
</IfModule>

# Список файлов в папке никому не нужен.
Options -Indexes

# Скрытые файлы наружу не отдаём.
<FilesMatch "^\.">
    Require all denied
</FilesMatch>

# Защита папки загрузок лежит В САМОЙ ПАПКЕ (public/uploads/.htaccess).
# Здесь её быть не может: блок <Directory> внутри .htaccess Apache не
# принимает и отвечает пятисоткой на весь сайт — «Directory not allowed here».

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
</IfModule>

# Сжатие и сроки хранения — заметно ускоряют сайт на дешёвом хостинге.
# Brotli (если модуль есть) жмёт текст ещё на пятую часть лучше gzip; сервер выбирает сам по заголовку браузера.
<IfModule mod_brotli.c>
    AddOutputFilterByType BROTLI_COMPRESS text/html text/css text/plain text/xml text/javascript application/javascript application/json application/manifest+json application/xml image/svg+xml
</IfModule>
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml text/javascript application/javascript application/json application/manifest+json application/xml image/svg+xml
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpeg  "access plus 1 year"
    ExpiresByType image/png   "access plus 1 year"
    ExpiresByType image/webp  "access plus 1 year"
    ExpiresByType image/avif  "access plus 1 year"
    ExpiresByType image/gif   "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
    # стили и скрипты сайта вызываются с меткой версии по содержимому (?v=…): сменился файл — сменился адрес, держать можно год
    ExpiresByType text/css    "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType text/javascript "access plus 1 year"
    ExpiresByType font/woff2  "access plus 1 year"
    ExpiresByType font/woff   "access plus 1 year"
</IfModule>
