Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator .htaccess cache

Przyspiesz stronę dzięki cache i gzip

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}
Ustaw czasy cache i wygeneruj reguły .htaccess.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Generator reguł cache w .htaccess

Odpowiednie nagłówki cache sprawiają, że powracający użytkownicy pobierają tylko zmienione pliki. To najprostszy sposób na szybsze ładowanie strony.

Jak dobierać czasy?

Typ plikuZalecany czas
HTMLkilka minut – 1 dzień
CSS, JavaScriptmiesiąc – rok (z wersjonowaniem)
Obrazy, fontyrok
API, JSONbez cache

Kompresja mod_deflate

Gzip potrafi zmniejszyć pliki tekstowe nawet o 70–80%. Nie kompresuj obrazów i wideo — są już skompresowane i tylko stracisz CPU.

Wymagane moduły

  • mod_expires — nagłówki Expires i Cache-Control.
  • mod_headers — własne nagłówki i Cache-Control immutable.
  • mod_deflate — kompresja odpowiedzi.

Jak działa generator reguł cache w .htaccess

Generator nie zgaduje niczego o Twoim serwerze — składa plik .htaccess z trzech bloków: mod_expires, mod_headers i mod_deflate. Pierwszy odpowiada za czas życia kopii w przeglądarce. Dla każdego wybranego typu pliku powstaje dyrektywa ExpiresByType, która zamienia czas na dwa nagłówki: Expires z konkretną datą oraz Cache-Control: max-age. Wzór jest prosty: max-age to liczba sekund od momentu wysłania odpowiedzi do wygaśnięcia kopii. Jeśli ustawiasz dzień, wartością jest 86 400 s (24 × 3600), a rok przy 365 dniach to 31 536 000 s.

Drugi blok, mod_headers, dopisuje i nadpisuje nagłówki, których sam mod_expires nie wygeneruje. Najczęściej chodzi o Cache-Control: immutable dla plików z wersją w nazwie, usunięcie ETag (Header unset ETag) oraz Vary: Accept-Encoding, który rozdziela wersję skompresowaną od zwykłej w cache pośredniczącym. Trzeci blok, mod_deflate, włącza kompresję odpowiedzi dla typów tekstowych — HTML, CSS, JavaScript, JSON i SVG. Gzip zmniejsza takie pliki nawet o 70–80%, natomiast obrazów i wideo nie ma sensu kompresować, bo są już skompresowane i stracisz tylko CPU.

Kolejność bloków w pliku ma znaczenie. Dyrektywy z mod_headers wykonują się po tych z mod_expires, więc to one decydują ostatecznie o wartości Cache-Control. Dlatego wyjątki — na przykład no-store dla API i JSON — umieszcza się na końcu, a reguły ogólne na początku. Generator buduje plik w tej właśnie kolejności, ale po ręcznej edycji łatwo ją zepsuć i wtedy jeden nagłówek nadpisze drugi.

Przykład: policzone nagłówki krok po kroku

  1. Ustal grupy plików według zaleceń: HTML — kilka minut do 1 dnia, CSS i JavaScript — miesiąc do roku przy wersjonowaniu, obrazy i fonty — rok, API i JSON — bez cache.
  2. Przelicz czasy na sekundy, bo tylko tę wartość rozumie Cache-Control: 5 minut to 300 s, 1 dzień to 86 400 s, 30 dni to 2 592 000 s, a rok liczony jako 365 dni to 31 536 000 s.
  3. Wpisz w generatorze ExpiresByType: dla text/html 86400, dla text/css i application/javascript 31536000, dla image/* i font/* również 31536000.
  4. Dodaj blok mod_headers i ustaw Cache-Control public, max-age=31536000, immutable — ale wyłącznie dla plików, których nazwa zawiera hash lub numer wersji.
  5. Włącz mod_deflate dla text/html, text/css, application/javascript, application/json i image/svg+xml.
  6. Policz efekt: plik JavaScript o rozmiarze 200 KB po gzipie zmniejszy się o 70–80%, czyli do 40–60 KB. Oszczędność to 140–160 KB na plik, a przy pięciu takich plikach transfer spada z 1000 KB do 200–300 KB.

Nagłówki i dyrektywy trafiające do pliku

Dyrektywa lub nagłówekModułZastosowanie
ExpiresActive Onmod_expiresWłącza obsługę nagłówków wygasania w danym katalogu.
ExpiresByTypemod_expiresUstawia datę wygaśnięcia i Cache-Control: max-age dla wybranego typu MIME.
Cache-Control: max-agemod_expires lub mod_headersLiczba sekund, przez które przeglądarka używa kopii bez pytania serwera.
Cache-Control: immutablemod_headersDla zasobów z wersją w nazwie — brak rewalidacji przez cały czas max-age.
Header unset ETagmod_headersUsuwa ETag, gdy cache ma opierać się wyłącznie na Cache-Control.
Header append Vary Accept-Encodingmod_headersRozdziela wersję skompresowaną i nieskompresowaną w cache pośredniczącym.
AddOutputFilterByType DEFLATEmod_deflateWłącza kompresję gzip dla typów tekstowych, nie dla obrazów i wideo.
Header set Cache-Control no-storemod_headersDla API i JSON, których odpowiedź nie może zostać zapisana w cache.

Jak używać wygenerowanych reguł bez psucia strony

  • Wersjonuj nazwy plików — długi max-age i immutable stosuj tylko wtedy, gdy zmiana treści oznacza zmianę nazwy, na przykład hash w pliku CSS. Inaczej użytkownik zostanie ze starą wersją do końca wybranego czasu.
  • Zacznij od krótszych czasów — dla HTML ustaw kilka minut do 1 dnia i wydłużaj po testach, a po rok dla CSS i JavaScript sięgaj dopiero wtedy, gdy masz już wdrożone wersjonowanie.
  • Nie kompresuj dwa razy — gzip włączaj dla tekstu, bo tam daje nawet 70–80% oszczędności. Obrazy, wideo i fonty są już skompresowane, więc deflate zużyje CPU bez wyraźnego zysku.
  • Sprawdź kolejność bloków — reguły z mod_headers umieszczaj tak, aby świadomie nadpisywały to, co ustawił mod_expires. W przeciwnym razie immutable lub no-store może nie zadziałać.
  • Testuj na wybranym katalogu — wrzuć .htaccess do podkatalogu, sprawdź nagłówki Cache-Control, Content-Encoding i Expires w narzędziach deweloperskich, a dopiero potem przenieś plik wyżej.

Czego narzędzie nie uwzględnia i co zaburza wynik

  • Nie zna Twojej infrastruktury — CDN, reverse proxy i cache serwera aplikacji mają własne czasy życia. Reguły z .htaccess ich nie omijają i mogą zostać nadpisane dalej w łańcuchu.
  • Nie zastąpi wersjonowania — generator nie doda hasha ani numeru wersji do nazw plików. Jeśli opublikujesz nowy CSS pod tą samą nazwą, długi max-age opóźni zmianę u użytkownika.
  • Nie sprawdzi, czy moduły są włączone — bez mod_expires, mod_headers i mod_deflate dyrektywy zwrócą błąd serwera albo zostaną zignorowane. Narzędzie nie odczyta konfiguracji Apache ani AllowOverride.
  • Nie obejmuje odpowiedzi dynamicznych — skrypty PHP, frameworki i aplikacje JavaScript mogą wysyłać własne nagłówki, które nadpiszą reguły z .htaccess i zmienią faktyczny efekt cache.

Najczęstsze pytania

Co daje immutable?

Informuje przeglądarkę, że plik nigdy się nie zmieni — nie będzie nawet pytać o jego aktualność. Stosuj tylko dla wersjonowanych nazw plików.

Dlaczego wyłączyć ETag?

ETag utrudnia skuteczne cache'owanie na serwerach za load balancerem — słabszy od Cache-Control, może powodować zbędne żądania.

Jak sprawdzić efekt?

Użyj narzędzi deweloperskich przeglądarki lub testu szybkości. Sprawdź nagłówki Cache-Control, Content-Encoding i Expires.

Czy max-age w .htaccess podaje się w sekundach?

Tak, Cache-Control: max-age to liczba sekund od momentu wysłania odpowiedzi. Dzień to 86 400 s, 30 dni to 2 592 000 s, a rok liczony jako 365 dni to 31 536 000 s.

Dlaczego po zmianie CSS użytkownicy nadal widzą starą wersję?

Bo przeglądarka trzyma kopię przez cały czas max-age i nie pyta serwera o nowszą. Rozwiązaniem jest wersjonowanie nazwy pliku albo skrócenie czasu cache i wymuszenie odświeżenia.

Czy reguły cache z .htaccess działają na Nginx?

Nie. To składnia Apache. Na Nginx odpowiedniki ustawia się w konfiguracji serwera, między innymi przez expires, add_header i gzip.

Czy warto kompresować obrazy przez mod_deflate?

Nie. Gzip zmniejsza głównie pliki tekstowe, nawet o 70–80%, a obrazy i wideo są już skompresowane. Włączenie deflate dla nich zużyje CPU bez wyraźnego zysku.

Co dokładnie daje Cache-Control immutable?

Mówi przeglądarce, że plik nie zmieni się przez cały czas max-age, więc nie wysyła nawet warunkowego zapytania o jego aktualność. Stosuj wyłącznie dla zasobów z wersją w nazwie.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!