Jak zabezpečit adresář heslem pomocí .htaccess a .htpasswd
Potřebujete omezit přístup ke složce na webu — například k testovacímu prostředí, administraci nebo interním materiálům? HTTP Basic Authentication (ověření jménem a heslem) je osvědčený způsob, jak to udělat. Po nastavení se při pokusu o přístup zobrazí přihlašovací dialog a bez správných údajů se návštěvník k obsahu nedostane.
Ochrana se vztahuje na vše, co je v daném adresáři — nejen na PHP skripty, ale i na obrázky, PDF, videa a jakékoli další soubory.
Na webhostingu to zvládnete přímo v Zákaznickém portálu bez jakéhokoli zásahu do souborů. Na VPS nastavíte ochranu ručně pomocí souborů .htaccess a .htpasswd — v tomto návodu vás provedeme oběma variantami krok za krokem.
Rychlý přehled pro pokročilé
Tato část slouží pouze pro ověření pro velmi zkušené uživatele, kteří si chtějí pouze ověřit postup a nepotřebují číst celý článek. Pro všechny ostatní doporučujeme pokračovat další sekcí.
Webhosting (Zákaznický portál):
- Vytvořte HTTP účet: Domény → [doména] → Http → Přehled HTTP účtů → + Nový HTTP účet → vyplňte jméno a heslo → Vytvořit HTTP účet.
- Zabezpečte složku: Http → Zabezpečené složky → + Zabezpečit složku → vyberte složku, ponechte zaškrtnutý Přístup jen s HTTP účtem → Vytvořit zabezpečenou složku.
- Otestujte přístup v prohlížeči — měl by se zobrazit přihlašovací dialog.
VPS (ruční .htaccess + .htpasswd):
- Vygenerujte hash hesla na hostingcanada.org/htpasswd-generator (algoritmus bcrypt).
- Přes Správce souborů (V3) nebo FTP vytvořte soubor .htpasswd mimo webroot (/www/hosting/DOMENA/.htpasswd) a vložte do něj vygenerovaný řádek.
- Ve složce, kterou chcete chránit, vytvořte soubor .htaccess s direktivami AuthType Basic, AuthUserFile (absolutní cesta k .htpasswd) a Require valid-user.
- Ověřte, že doména běží na Apache nebo kombinovaném režimu (ne čistý Nginx) — jinak .htaccess nebude fungovat.
- Otestujte přístup v prohlížeči.
Co je dobré vědět předem
HTTP Basic Authentication přes .htaccess funguje na úrovni webserveru Apache. Při každém požadavku na chráněný adresář Apache zkontroluje přihlašovací údaje a bez platného jména a hesla odmítne přístup. Na čistém Nginx se .htaccess nepoužívá — pokud vaše doména běží na Nginx, podívejte se na sekci
Kde .htaccess nefunguje, kde najdete alternativní řešení.
Na webhostingu přes Zákaznický portál zvládnete nastavení za 3–5 minut. Ruční postup na VPS zabere přibližně 10–15 minut.
Co budete potřebovat
Webhosting (Zákaznický portál):
- Přístup do Zákaznického portálu
- Aktivní doménu na webhostingu
VPS:
- Přístup k serveru přes Správce souborů ve VPS Centru V3 nebo přes FTP/SFTP (návod: Jak se připojit na FTP)
- Doménu s režimem webserveru Apache, Apache – Performance nebo Apache – Super cache
- Volitelně: SSH přístup k serveru — pokud chcete generovat hash hesla přímo na serveru příkazem htpasswd místo online generátoru (návod: Kompletní průvodce SSH)
Zabezpečení přes Zákaznický portál (webhosting)
Na webhostingu nemusíte vytvářet žádné soubory ručně. Zákaznický portál nabízí v sekci Http dva nástroje — jeden pro správu uživatelských účtů a druhý pro ochranu složek. Stačí zadat přihlašovací údaje, vybrat složku a vše se nastaví automaticky.
Krok 1: Vytvořte HTTP účet v Zákaznickém portálu
Přihlaste se do Zákaznického portálu, vyberte doménu a přejděte do Http → Přehled HTTP účtů. Klikněte na + Nový HTTP účet.
V dialogu vyplňte:
- Přihlašovací jméno — uživatelské jméno pro přístup do chráněné složky.
- Heslo — heslo pro přístup.
- Zabezpečená složka — vyberte konkrétní složku, pro kterou bude účet platit, nebo ponechte výchozí hodnotu Všechny (účet bude fungovat pro všechny chráněné složky na doméně).
Klikněte na Vytvořit HTTP účet.

Po vytvoření se účet zobrazí v tabulce s přehledem všech HTTP účtů. Přes tříbodové menu (⋯) u každého účtu ho můžete upravit nebo smazat.

Krok 2: Zabezpečte složku v Zákaznickém portálu
Přejděte do Http → Zabezpečené složky a klikněte na + Zabezpečit složku.
V dialogu nastavte:
- Složka na FTP — z dropdownu vyberte složku, kterou chcete chránit. Výchozí hodnota / chrání celý web.
- Přístup jen s HTTP účtem — ve výchozím stavu je zaškrtnutý. Ponechte ho zaškrtnutý — tím se aktivuje ochrana heslem. Přístup bude povolen pouze uživatelům s HTTP účtem, který jste vytvořili v předchozím kroku.
Ostatní možnosti (Povolit výpis obsahu složky, Aplikovat zabanované IP adresy, Zákaz vstupu do adresáře z webu, Mod rewrite pravidla) pro základní ochranu heslem měnit nemusíte.
Klikněte na Vytvořit zabezpečenou složku.

Po vytvoření se složka zobrazí v tabulce. Sloupec Přístup pouze s heslem by měl mít zapnutý přepínač (zelený).

Krok 3: Ověřte funkčnost ochrany (webhosting)
Otevřete v prohlížeči adresu chráněné složky — například https://vasedomena.cz/admin/. Měl by se zobrazit přihlašovací dialog s výzvou k zadání jména a hesla.

Po zadání správných údajů se zobrazí obsah složky. Pokud se dialog nezobrazí, podívejte se do sekce Řešení problémů.
Ruční nastavení pomocí .htaccess a .htpasswd (VPS)
VPS Centrum V3 ani V2 nemají GUI nástroj pro ochranu složek heslem — na VPS se ochrana nastavuje výhradně ručně pomocí souborů .htaccess a .htpasswd. Tento postup můžete použít i na webhostingu, pokud potřebujete pokročilejší konfiguraci (omezení přístupu podle IP adresy, výjimky pro konkrétní soubory apod.).
Princip je následující: soubor .htpasswd se seznamem uživatelů a jejich zahashovaných hesel umístíte mimo veřejně přístupnou část webu a v chráněné složce vytvoříte soubor .htaccess s pravidly pro ověření.
Krok 1: Vytvořte soubor .htpasswd
Soubor .htpasswd obsahuje seznam uživatelů a jejich hesel v zahashované podobě. I kdyby se někdo k souboru dostal, skutečná hesla z něj nezjistí.
Soubor .htpasswd umístěte mimo webroot domény — to znamená mimo složku /www/hosting/DOMENA/www/, odkud se servíruje web. Bezpečné umístění je o úroveň výš: /www/hosting/DOMENA/.htpasswd. Díky tomu nebude soubor přístupný přes prohlížeč.
Doporučený způsob — Správce souborů nebo FTP + online generátor:
- Otevřete hostingcanada.org/htpasswd-generator. Zadejte uživatelské jméno, heslo a zvolte algoritmus bcrypt. Klikněte na generování.
- Výsledkem bude řádek ve formátu jmeno:hash — například jan:$2y$05$K8r3nGhIs7pA9xVz.... Zkopírujte ho.
- Ve Správci souborů ve VPS Centru V3 (nebo přes FTP klienta) přejděte do složky /www/hosting/DOMENA/ (nadřazená složka webrootu, ne do /www/ samotné) a vytvořte nový soubor s názvem .htpasswd (s tečkou na začátku).
- Do souboru vložte zkopírovaný řádek. Pokud chcete více uživatelů, vložte každého na samostatný řádek.
Výsledný soubor bude vypadat přibližně takto:
jan:$2y$05$K8r3nGhIs7pA9xVz...
petra:$2y$05$Lm4qWxYz8bC1dEf...
Každý řádek obsahuje jméno uživatele a hash hesla oddělené dvojtečkou.
Oprávnění souboru se při nahrání přes Správce souborů nebo FTP nastaví automaticky — žádný další krok není potřeba.
Alternativa pro pokročilé — příkaz htpasswd přes SSH:
Pokud jste připojení k serveru přes SSH, můžete soubor .htpasswd vytvořit přímo na serveru bez online generátoru. Příkaz htpasswd vygeneruje hash hesla automaticky:
htpasswd -c /www/hosting/DOMENA/.htpasswd UZIVATEL
Kde DOMENA je název vaší domény a UZIVATEL přihlašovací jméno. Příkaz se zeptá na heslo a vytvoří nový soubor. Pro přidání dalšího uživatele do existujícího souboru spusťte stejný příkaz bez přepínače -c (přepínač -c vytváří nový soubor a přepsal by stávající):
htpasswd /www/hosting/DOMENA/.htpasswd DALSI_UZIVATEL
chown UZIVATEL_DOMENY:UZIVATEL_DOMENY /www/hosting/DOMENA/.htpasswd
chmod 644 /www/hosting/DOMENA/.htpasswd
Kde UZIVATEL_DOMENY je systémový uživatel domény (název domény s tečkami nahrazenými pomlčkami — například pro doménu example.cz je to example-cz). Zjistíte ho příkazem ls -la /www/hosting/DOMENA/www/ — třetí sloupec ve výpisu.
Krok 2: Vytvořte soubor .htaccess
Ve složce, kterou chcete chránit, vytvořte soubor .htaccess (název začíná tečkou) s následujícím obsahem:
AuthType Basic
AuthName "Chranena oblast"
AuthUserFile /www/hosting/DOMENA/.htpasswd
Require valid-user
Kde:
- AuthType Basic — typ ověření (Basic Authentication)
- AuthName — název chráněné oblasti, který se zobrazí v přihlašovacím dialogu. Nepoužívejte diakritiku — některé prohlížeče ji nezobrazí správně.
- AuthUserFile — absolutní cesta k souboru .htpasswd. Relativní cesta nebude fungovat. Nahraďte DOMENA názvem vaší domény.
- Require valid-user — přístup povolí jakémukoli uživateli ze souboru .htpasswd
Pokud chcete chránit například složku admin na doméně example.cz, soubor .htaccess vytvoříte v cestě /www/hosting/example.cz/www/admin/.htaccess a direktiva AuthUserFile bude ukazovat na /www/hosting/example.cz/.htpasswd.
Krok 3: Ověřte funkčnost ochrany (VPS)
Otevřete v prohlížeči adresu chráněné složky — například https://vasedomena.cz/admin/. Měl by se zobrazit přihlašovací dialog. Po zadání jména a hesla, které jste nastavili v souboru .htpasswd, se zobrazí obsah složky.

Pokud se dialog nezobrazí nebo se zobrazí chyba, podívejte se do sekce Řešení problémů níže.
Kde .htaccess nefunguje — režimy webserveru na VPS
Na VPS s VPS Centrem V3 si můžete u každé domény zvolit režim webserveru. Soubor .htaccess funguje ve třech ze čtyř režimů:
| Režim webserveru | .htaccess | Poznámka |
|---|---|---|
| Apache | ✅ Funguje | Čistý Apache |
| Apache – Performance (výchozí) | ✅ Funguje | Nginx + Apache — výchozí pro nové domény |
| Apache – Super cache | ✅ Funguje | Nginx cache + Apache |
| Nginx | ❌ Nefunguje | Čistý Nginx — .htaccess se ignoruje |
Režim webserveru uvidíte ve VPS Centru V3 v detailu domény v sekci Přehled — a změníte ho tlačítkem Změnit nastavení webserveru.

Ve VPS Centru V2 běží vždy buď Apache, nebo Nginx (nikdy oba současně). Pokud je na doméně nastavený Apache, .htaccess funguje. Pokud Nginx — nefunguje.
Co dělat na čistém Nginx
Pokud vaše doména běží na čistém Nginx, máte dvě možnosti:
Jednodušší řešení — přepněte režim webserveru. Pokud nemáte specifický důvod pro čistý Nginx, přepněte doménu na režim Apache – Performance (výchozí). Ve VPS Centru V3 to nastavíte v detailu domény → Přehled → sekce Webserver → tlačítko Nastavení. Po přepnutí bude .htaccess fungovat a můžete použít postup popsaný výše.
Alternativa — úprava Nginx configu přes podporu. Pokud potřebujete zůstat na čistém Nginx, ochrana adresáře se v Nginxu nastavuje přes direktivy auth_basic a auth_basic_user_file přímo v configu domény. Soubor .htpasswd s uživateli a hesly vytvoříte stejným postupem jako v kroku 1 výše — liší se jen způsob, jakým webserveru řeknete, aby ho použil.
Připojte se k serveru přes SSH a otevřete konfigurační soubor domény:
nano /etc/nginx/sites-available/domains_conf/DOMENA.conf
Dovnitř bloku server { ... } přidejte nový blok location pro složku, kterou chcete chránit — například pro složku admin:
location /admin {
auth_basic "Chranena oblast";
auth_basic_user_file /www/hosting/DOMENA/.htpasswd;
}
Kde:
- auth_basic — název chráněné oblasti (zobrazí se v přihlašovacím dialogu, stejně jako AuthName u Apache). Nepoužívejte diakritiku.
- auth_basic_user_file — absolutní cesta k souboru .htpasswd. Nahraďte DOMENA názvem vaší domény.
Pokud chcete chránit celý web (všechny URL), umístěte direktivy do existujícího hlavního bloku location / { ... } místo vytváření nového bloku.
Po úpravě ověřte, že konfigurace neobsahuje syntaktické chyby:
nginx -t
Pokud výstup obsahuje syntax is ok a test is successful, znovu načtěte konfiguraci:
systemctl reload nginx
Řešení problémů
- Přihlašovací dialog se nezobrazí — stránka se načte bez ověření
- Na webhostingu (GUI): Ověřte, že v sekci Http → Zabezpečené složky je u příslušné složky zapnutý přepínač Přístup pouze s heslem (zelený). Pokud není, klikněte na něj.
- Na VPS (ruční .htaccess): Ověřte, že soubor .htaccess je ve správné složce (v té, kterou chcete chránit, ne v nadřazené).
- Zkontrolujte, že název souboru je přesně .htaccess (s tečkou na začátku, bez přípony). Některé FTP klienty nebo editory mohou přidat neviditelnou příponu.
- Na VPS ověřte režim webserveru — na čistém Nginx se .htaccess ignoruje (viz sekce Kde .htaccess nefunguje výše).
- Ve VPS Centru V2 ověřte, že doména běží na Apache (ne na Nginx).
- Chyba 500 (Internal Server Error) po vytvoření .htaccess
- Nejčastější příčinou je špatná cesta v direktivě AuthUserFile. Cesta musí být absolutní (začínající /) a musí ukazovat na existující soubor .htpasswd. Zkontrolujte, že jste správně dosadili název domény.
- Ověřte, že v souboru .htaccess není překlep — stačí jedno špatné písmeno v názvu direktivy a Apache vrátí chybu 500. Zkontrolujte zejména AuthType, AuthName, AuthUserFile a Require.
- Na VPS zkontrolujte Apache error log: tail -20 /var/log/apache2/DOMENA/error-DOMENA.log — řádek s chybou přesně popíše, co je špatně.
- Správné heslo nefunguje — dialog se zobrazí znovu
- Zkontrolujte, že hash v souboru .htpasswd odpovídá heslu. Při ruční tvorbě souboru je snadné zkopírovat hash neúplně nebo přidat neviditelný znak.
- Ověřte formát souboru .htpasswd — každý řádek musí mít formát jmeno:hash, oddělený dvojtečkou. Za posledním řádkem by měl být prázdný řádek (newline).
- Zkuste vytvořit nového uživatele příkazem htpasswd a otestovat přihlášení s ním.
- Chyba 403 (Forbidden) místo přihlašovacího dialogu
- Direktiva Require může být nastavena špatně. Ověřte, že máte Require valid-user (povolí všechny uživatele ze souboru), ne Require user KONKRETNI_JMENO s neexistujícím uživatelem.
- Na VPS zkontrolujte oprávnění souboru .htpasswd — webserver ho musí umět přečíst. Pokud jste soubor nahrávali přes Správce souborů nebo FTP, oprávnění by měla být v pořádku. Pokud jste ho vytvořili přes SSH jako root, ověřte, že jste změnili vlastníka a oprávnění (viz SSH alternativa v kroku 1).
- Ochrana zabírá jinak, než jsem čekal — chybí nebo naopak
- Soubor .htaccess chrání složku, ve které se nachází, a všechny její podsložky. Pokud chcete chránit jen jednu konkrétní podsložku, umístěte .htaccess do ní — ne do nadřazené složky.
- Pokud máte .htaccess v nadřazené složce a chcete jednu podsložku z ochrany vyjmout, vytvořte v té podsložce nový .htaccess s direktivou Require all granted místo Require valid-user.
- Vícenásobné .htaccess se aplikují kaskádově: soubor v podsložce přepíše nastavení z nadřazené složky.
Pokud problém přetrvává, kontaktujte naši podporu — rádi vám pomůžeme.