.htaccess като инструмент за ускорение, сигурност и контрол

.htaccess като инструмент за ускорение, сигурност и контрол

Файлът .htaccess е мощен инструмент за управление на поведението на Apache сървъра. Когато се използва стратегически, той може да подобри производителността, да ограничи нежелан достъп и да наложи стандарти за сигурност и кеширане — без да се докосва до приложението.

1. Блокиране на заявки към несъществуващи, но често атакувани пътища

										
											Options -Indexes
											RedirectMatch 410 ^/(admin|cms|backup|api|wp-content|\.git)
										
									

Какво прави: Options -Indexes забранява автоматичното показване на съдържание в директории без index файл.
RedirectMatch 410 отказва достъп до често атакувани пътища с код 410 Gone — съобщение, че ресурсът не съществува и няма да се върне.
Защо: Ботовете често сканират за административни панели, CMS, бекъпи и други уязвими точки. Дори да не съществуват, тези заявки натоварват сървъра и издават поведение.
Кога: Винаги, когато искаме да откажем достъп до шаблонни пътища, които не използваме, но знаем, че се атакуват.
Практика: Използваме 410 вместо 403, защото е по-тихо и не издава наличието на ресурс. Това не е защита на реални директории, а превантивен отказ към ботове.

2. Блокиране на нежелани потребителски агенти

										
											RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
											RewriteCond %{HTTP_USER_AGENT} (AhrefsBot|MJ12bot|python|zgrab) [NC]
											RewriteRule ^.*$ - [F,L]
										
									

Какво прави: Блокира празни и агресивни ботове, които не носят стойност.
Защо: За да запазим ресурси и да намалим ненужния crawl.
Кога: Когато искаме да ограничим достъпа до сайта само за реални потребители и полезни ботове.
Практика: Използваме [NC] за нечувствителност към регистъра и [F,L] за отказ и край на обработката.

3. Компресия само за текстови ресурси

										
											<IfModule mod_deflate.c>
												AddOutputFilterByType DEFLATE text/html text/css application/javascript
												SetEnvIfNoCase Request_URI \.(?:jpg|png|webp)$ no-gzip
											</IfModule>
										
									

Какво прави: Компресира HTML, CSS и JS файлове, но изключва изображения.
Защо: Gzip компресията ускорява зареждането на текстови ресурси, но не е ефективна за изображения.
Кога: Винаги, освен ако не използваме CDN с автоматична компресия.
Практика: Изключваме изображенията с SetEnvIfNoCase, за да избегнем двойна компресия.

4. Кеш контрол за статични и динамични ресурси

										
											<FilesMatch "\.(js|css|png|jpg|svg)$">
												Header set Cache-Control "max-age=31536000, immutable"
											</FilesMatch>
						
											<FilesMatch "\.(html|php)$">
												Header set Cache-Control "max-age=600, private, must-revalidate"
											</FilesMatch>
										
									

Какво прави: Статичните ресурси се кешират агресивно, динамичните — внимателно.
Защо: Кешът намалява натоварването и ускорява сайта.
Кога: Винаги, но с различни стойности според типа ресурс.
Практика: Използваме immutable за файлове, които не се променят, и private за чувствителни страници.

5. Затягане на сигурността чрез HTTP headers

										
											Header always set X-Content-Type-Options "nosniff"
											Header always set Referrer-Policy "strict-origin-when-cross-origin"
											Header always set Content-Security-Policy "frame-ancestors 'none';"
											Header unset X-Powered-By
										
									

Какво прави: Предотвратява MIME sniffing, clickjacking и изтичане на информация.
Защо: За да защитим потребителите и да скрием технологията зад сайта.
Кога: Винаги — това са базови защитни мерки.
Практика: Премахваме X-Powered-By, за да не издаваме какво използваме.

Заключение

.htaccess не е заместител на добра архитектура, но е ценен инструмент за контрол и оптимизация. Когато се използва правилно, той подобрява производителността, ограничава нежелан достъп и налага стандарти за сигурност и кеширане. В нашите проекти използваме подобни техники, за да гарантираме бързина, стабилност и контрол — без компромис със стила или функционалността.