Technické SEO — slovníček pojmů
Co je soubor .htaccess
a k čemu ho použít
.htaccess je konfigurační soubor webového serveru Apache. Umožňuje nastavit přesměrování, vynutit HTTPS, blokovat přístup nebo zapnout kešování bez zásahu do hlavní konfigurace serveru. Tato stránka vysvětluje, jak soubor funguje, a obsahuje příklady kódu ke zkopírování.
Obsah článku
Definice
Co je soubor .htaccess
.htaccess je textový konfigurační soubor webového serveru Apache. Název pochází z původní funkce souboru — řízení přístupu (access control) na úrovni adresáře. Dnes slouží k mnohem širšímu spektru nastavení: přesměrování, výkon, zabezpečení i chybové stránky.
Proč existuje? Hlavní konfigurační soubor Apache se jmenuje httpd.conf a leží na serveru na místě, ke kterému má přístup pouze správce. Pokud provozuješ web na sdíleném hostingu nebo nemáš přístup k httpd.conf, .htaccess ti umožňuje nastavit chování serveru ve svém adresáři bez toho, aby to správce musel měnit za tebe.
Jde o součást technického SEO — správně nakonfigurovaný .htaccess zajišťuje přesměrování, která Google přenáší hodnocení stránek, a zabraňuje vzniku duplicitního obsahu způsobeného přístupem přes HTTP i HTTPS nebo www i bez www zároveň.
Začínáme
Jak soubor .htaccess vytvořit a kde ho umístit
Kde soubor musí ležet
Soubor .htaccess se musí nacházet ve složce, pro kterou chceš nastavení aplikovat. Platí pro daný adresář a všechny jeho podadresáře. Pokud ho umístíš do kořenového adresáře webu (tzv. document root, například /public_html/ nebo /www/), budou se jeho direktivy aplikovat na celý web.
Na jednom webu může existovat více souborů .htaccess najednou, každý v jiném adresáři. Pokud se direktivy překrývají, má vyšší prioritu soubor v bližším (vnořenějším) adresáři. Nastavení z podadresáře tedy přebije nastavení z nadřazeného adresáře.
Jak soubor vytvořit na Windows
Na Linuxu a macOS soubory začínající tečkou vytvoříš běžně přes terminál. Na Windows to komplikuje systémové omezení — systém předpokládá, že každý soubor musí mít příponu.
1. Otevři Poznámkový blok (nebo jiný textový editor). 2. Klikni na Soubor a vyber Uložit jako. 3. Do pole Název souboru zadej ".htaccess" včetně uvozovek. Uvozovky jsou nutné, jinak Windows přidá příponu .txt. 4. V poli Typ souboru vyber Všechny soubory. 5. Ulož.
Alternativně soubor vytvoříš v příkazovém řádku (cmd) příkazem: echo. > .htaccess
Jak soubor nahrát přes FTP
.htaccess je na Linuxu skrytý soubor — na FTP serveru ho ve výchozím stavu nevidíš. Zobrazíš ho v nastavení svého FTP klienta: v programu FileZilla jde o menu Server a volbu Vynutit zobrazení skrytých souborů. V Total Commanderu použij menu Síť a volbu FTP – ukázat skryté soubory.
Po úpravě soubor nahraj na server standardním způsobem. Změny se projevují okamžitě, bez restartu serveru.
Jak to číst
Základy syntaxe .htaccess — jak číst direktivy
Než začneš kopírovat příklady, je užitečné rozumět tomu, co jednotlivé části znamenají. Jinak při první nutné úpravě budeš tápat.
Komentáře v souboru začínají znakem #. Cokoliv za # na daném řádku server ignoruje. Komentáře používej k popisu bloků — oceníš to, až se k souboru vrátíš za půl roku.
RewriteEngine, RewriteCond a RewriteRule
Tři nejpoužívanější direktivy pro přesměrování a přepis URL:
RewriteEngine On
Zapíná modul mod_rewrite. Bez tohoto řádku nefunguje žádné pravidlo RewriteRule. Stačí ho uvést jednou, zpravidla na začátku bloku.
RewriteCond
Definuje podmínku, která musí být splněna, aby se aplikovalo následující RewriteRule. Podmínek může být více za sebou; výchozí chování vyžaduje splnění všech. Alternativu označíš příznakem [OR] na konci řádku.
RewriteRule
Samotné pravidlo přepisu. Vzor je regulární výraz, který se porovnává s požadovanou URL. Cilová adresa je výsledná URL. Flagy v hranatých závorkách řídí chování pravidla.
Nejčastější flagy (příznaky) v RewriteRule
| Flag | Funkce |
|---|---|
| R=301 | Přesměrování s kódem 301 (trvalé). R bez čísla znamená 302 (dočasné). |
| L | Last — po splnění tohoto pravidla se nepokračuje dalšími pravidly. Téměř vždy ho přidej. |
| QSA | Query String Append — zachová parametry URL (?id=5 apod.) při přesměrování. |
| NC | No Case — porovnávání bez ohledu na velká a malá písmena. |
| NE | No Escape — zachová speciální znaky v URL bez kódování. |
Flagy kombinuješ čárkou v jedné závorce: [R=301,L] nebo [NC,L].
Nejčastější proměnné v RewriteCond
| Proměnná | Co obsahuje |
|---|---|
| %{HTTP_HOST} | Název domény požadavku (např. example.com nebo www.example.com) |
| %{REQUEST_URI} | Cesta v URL bez domény (např. /kontakt/) |
| %{HTTPS} | Hodnota „on“ pokud je připojení přes HTTPS, jinak prázdná |
| %{REMOTE_ADDR} | IP adresa návštěvníka |
| %{REQUEST_FILENAME} | Fyzická cesta k souboru na serveru |
Operátory podmínek: ! znamená negaci (nesplňuje), ^výraz$ ohraničuje začátek a konec řetězce, .* znamená „libovolné znaky“.
Příklady ke zkopírování
Nejčastější použití .htaccess
Každý příklad níže je funkční blok kódu, který můžeš zkopírovat a upravit pro svou doménu. U každého je vysvětleno, co přesně kód dělá a na co si dát pozor.
Přesměrování na HTTPS
Vynucení HTTPS přesměruje všechny požadavky na HTTP verzi webu automaticky na HTTPS. Jde o základní nastavení každého webu, který má platný SSL certifikát. Bez tohoto pravidla je web přístupný na obou verzích, což má dopad na přesměrování a indexaci.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Přesměrování www na verzi bez www (a obráceně)
Verzi domény sjednoť na jednu variantu. Mít web přístupný na obou adresách zároveň vytváří riziko duplicitního obsahu. Trvalé přesměrování 301 zajistí, že Google obě varianty sloučí do jedné a hodnocení stránek se nepřerozdělí.
Přesměrování z www na bez www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Přesměrování z bez www na www:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Přesměrování konkrétní staré URL na novou
Když přesouváš stránku na novou adresu, přidej trvalé přesměrování, aby Google přenesl hodnocení ze staré URL na novou a návštěvníci se neztratili.
Redirect 301 /stara-stranka/ https://www.example.com/nova-stranka/
Pokud přesměrováváš celou složku na novou cestu, použij:
RedirectMatch 301 ^/stary-adresar/(.*)$ https://www.example.com/novy-adresar/$1
Vlastní chybové stránky
Místo výchozích serverových chybových hlášení zobraz vlastní stránku, která udrží uživatele na webu a vysvětlí situaci v jazyce a designu tvého webu.
ErrorDocument 404 /stranka-nenalezena.html ErrorDocument 500 /chyba-serveru.html ErrorDocument 403 /pristup-odepren.html
Zakázání výpisu adresářů
Pokud adresář neobsahuje výchozí soubor (index.html nebo index.php), Apache ve výchozím nastavení zobrazí seznam souborů. To je bezpečnostní riziko — návštěvník vidí strukturu souborů na serveru. Zakáže ho jediná direktiva:
Options -Indexes
Nastavení výchozího souboru adresáře
Direktiva DirectoryIndex určuje, který soubor server otevře při přístupu na adresář. Server prochází soubory v pořadí, v jakém jsou uvedeny, a otevře první, který najde.
DirectoryIndex index.php index.html
Rychlost načítání
.htaccess pro výkon webu — kešování a komprese
Dvě nastavení s přímým dopadem na rychlost načítání webu: kešování souborů v prohlížeči a komprese dat při přenosu. Obě vyžadují, aby na serveru byly povoleny příslušné Apache moduly — mod_expires pro kešování a mod_deflate pro kompresi.
Kešování souborů (mod_expires)
Kešování říká prohlížeči, jak dlouho má uchovávat stažené soubory (CSS, obrázky, skripty) v lokální paměti, než si je znovu vyžádá ze serveru. Při opakované návštěvě stránky pak prohlížeč tyto soubory nenačítá ze sítě, ale z vlastní cache — stránka se zobrazí rychleji a server je méně zatížen.
ExpiresActive On ExpiresByType text/html A0 ExpiresByType text/css A604800 ExpiresByType application/javascript A604800 ExpiresByType image/jpeg A2592000 ExpiresByType image/png A2592000 ExpiresByType image/webp A2592000 ExpiresByType image/svg+xml A2592000 ExpiresByType image/x-icon A31536000 ExpiresByType application/pdf A2592000 ExpiresByType font/woff2 A31536000
Písmeno A označuje dobu od posledního přístupu (Access), číslo je počet sekund. A604800 znamená 7 dní, A2592000 je 30 dní, A31536000 je 1 rok.
| Typ souboru | Doporučená doba | Zdůvodnění |
|---|---|---|
| HTML | 0 sekund (nekešovat) | HTML se mění nejčastěji, stará verze by zobrazila zastaralý obsah |
| CSS, JavaScript | 7 dní (604 800 s) | Mění se při každém nasazení, krátká doba zajistí aktuálnost |
| Obrázky (JPEG, PNG, WebP) | 30 dní (2 592 000 s) | Obrázky se mění méně, delší cache snižuje přenosy |
| Fonty (WOFF2) | 1 rok (31 536 000 s) | Fonty se prakticky nemění, maximální cache je bezpečná |
| Ikony (favicon) | 1 rok (31 536 000 s) | Stejný důvod jako u fontů |
Komprese přenášených dat (mod_deflate)
Komprese pomocí mod_deflate zmenší velikost textových souborů před odesláním prohlížeči. Prohlížeč data po přijetí rozbalí. U CSS a JavaScriptu typicky dosáhneš 60–80 % úspory přenášených dat oproti nekomprimované verzi.
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE font/woff2 </IfModule>
Bezpečnost
.htaccess a zabezpečení webu
.htaccess umožňuje nastavit základní bezpečnostní pravidla bez zásahu do kódu aplikace. Tři oblasti mají největší praktický dopad: ochrana citlivých souborů, řízení přístupu podle IP adresy a ochrana adresáře heslem.
Blokování přístupu k citlivým souborům
Soubory jako .env, wp-config.php nebo .htpasswd obsahují databázové přihlašovací údaje a API klíče. Pokud jsou dostupné přes URL, jde o závažné bezpečnostní riziko.
# Apache 2.4 a novější (aktuální standard) <FilesMatch "^\.env|wp-config\.php|\.htpasswd|composer\.json|composer\.lock"> Require all denied </FilesMatch>
Omezení přístupu podle IP adresy
Pro zpřístupnění části webu jen svému týmu nebo konkrétním IP adresám použij řízení přístupu na úrovni adresáře. Typické využití: staging prostředí, adminský panel, interní nástroje.
Povolení přístupu pouze pro konkrétní IP (Apache 2.4):
Require ip 192.168.1.100 Require ip 10.0.0.0/8
Zablokování konkrétní IP:
<RequireAll> Require all granted Require not ip 203.0.113.45 </RequireAll>
Ochrana adresáře heslem (.htpasswd)
Pro ochranu adresáře přihlašovacím jménem a heslem potřebuješ dva soubory: .htaccess v chráněném adresáři a .htpasswd se záznamy uživatelů.
AuthType Basic AuthName "Chranena oblast" AuthUserFile /absolutni/cesta/k/.htpasswd Require valid-user
CMS
.htaccess a WordPress
WordPress generuje vlastní blok pravidel v .htaccess automaticky při aktivaci přepisování URL (trvalých odkazů). Tento blok vypadá takto:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Kde v souboru přidávat vlastní direktivy
Nikdy nevkládej vlastní direktivy dovnitř bloku mezi # BEGIN WordPress a # END WordPress. WordPress tento blok při každém uložení nastavení přepisuje, a cokoliv dovnitř vložíš, může být bez varování smazáno.
Vlastní direktivy přidávej vždy nad nebo pod tento blok:
# === Vlastni nastaveni — HTTPS ===
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN WordPress
RewriteEngine On
...
# END WordPress
Co dělat, když WordPress přepisuje .htaccess
WordPress přepisuje .htaccess při každém uložení nastavení trvalých odkazů nebo při aktivaci určitých pluginů. Pokud zjistíš, že tvoje vlastní direktivy mizí, máš dvě možnosti.
První možnost: Přesuň vlastní direktivy zcela nad blok WordPress a ulož soubor ručně přes FTP. Pak ověř, že WordPress nemá právo soubor přepsat — zkontroluj oprávnění souboru (doporučené: 644).
Druhá možnost: Pokud potřebuješ řídit přesměrování na úrovni WordPress aplikace, zvažuj místo .htaccess plugin pro správu přesměrování. Přesměrování pak spravuje WordPress databáze a .htaccess zůstane nedotčen.
Co vývojáři neříkají
Dopad .htaccess na rychlost serveru
.htaccess je pohodlný, ale má cenu. Podle oficiální dokumentace Apache platí: kdykoli je povoleno používání .htaccess souborů, Apache prohledává při každém requestu celou cestu adresářů od kořene po cílový soubor a hledá .htaccess v každém z nich.
Pokud je požadavek směřován do adresáře /www/htdocs/example/, Apache hledá soubor na čtyřech místech: v /, v /www/, v /www/htdocs/ a v /www/htdocs/example/. To jsou 4 dodatečné přístupy na disk při každém requestu, i pokud žádný .htaccess neexistuje.
Debugging
Řešení chyb — co dělat, když .htaccess nefunguje
Chyba 500 Internal Server Error
Chyba 500 po uložení .htaccess téměř vždy znamená syntaktickou chybu v souboru nebo pokus o použití direktivy, která není na serveru povolena.
Postup krok za krokem: 1. Otevri error log serveru. Na sdilenem hostingu: ovladaci panel (cPanel, Plesk) sekce Chybove zaznamy nebo Logy. Na VPS: /var/log/apache2/error.log nebo /var/log/httpd/error.log 2. Najdi radek s casovym razitkem odpovidajicim dobe chyby. Chybova zprava uvede bud cislo radku, nebo nazev nepovolene direktivy. 3. Oprav nebo odstraň problemicky radek. 4. Bez pristupu k error logu: pridavej direktivy po jedne a po kazdem pridani over, ze web funguje.
Přesměrování nefunguje
Pokud pravidlo RewriteRule nefunguje, zkontroluj v tomto pořadí:
Nekonečná smyčka přesměrování (ERR_TOO_MANY_REDIRECTS)
Chyba ERR_TOO_MANY_REDIRECTS znamená, že pravidlo přesměrování odkazuje samo na sebe nebo na jiné pravidlo, které zpátky odkazuje na něj. Nejčastější příčiny: kombinace pravidel www a HTTPS bez správných podmínek RewriteCond, nebo chybějící podmínka %{HTTPS} off.
Řešení: Vymaž obsah .htaccess — web se zobrazí bez přesměrování. Pak přidávej pravidla jedno po druhém a po každém přidání ověř funkčnost v anonymním okně prohlížeče, aby ses vyhnul starým přesměrováním uloženým v cache.
Soubor se ignoruje
Pokud Apache .htaccess zcela ignoruje, nejpravděpodobnější příčina je AllowOverride None v hlavní konfiguraci serveru. Toto nastavení zakáže .htaccess globálně. Vyřeší to správce serveru nebo poskytovatel hostingu — na sdíleném hostingu je AllowOverride All obvykle výchozí nastavení.
Test funkčnosti: Přidej do souboru záměrně neplatnou direktivu (např. slovo „test“ na prázdný řádek). Pokud se zobrazí chyba 500, .htaccess funguje. Pokud se stránka zobrazí normálně, .htaccess je ignorován. Po testu neplatný řádek odstraň.
Nejčastější otázky