Přeskočit obsah

Práce s .htaccess

Soubor .htaccess slouží k lokálnímu nastavení některých direktiv webserveru Apache uživatelem, aniž by bylo nutné zasahovat do konfigurace virtualhostu. Volby v něm definované platí vždy v adresáři, ve kterém je umístěný a v jeho podadresářích.

Pozor, řada redakčních systémů a jiných webových aplikací již svůj .htaccess má a zejména rewrite pravidla v něm obsažená jsou nutná pro jejich fungování. V takovém případě by neměl být tento soubor nahrazen, ale do jeho obsahu doplněny požadované direktivy s přihlédnutím k tomu, aby nebyly v konfliktu s jinými, již v něm definovanými.

Zaheslování stránek

Jednou z oblíbených možností je nastavení jednoduché a bezpečné autentizace.

AuthUserFile .htpasswd  
AuthType Basic  
AuthName "Zde bude text zobrazený u výzvy k zadání jména a hesla"  
Require valid-user 

V případě SSH přístupu je možné soubor .htpasswd vygenerovat přímo na serveru:

htpasswd -bc .htpasswd uzivatel heslo

V ostatních případech, pokud není k dispozici ani jiný linuxový systém (příkaz htpasswd je součást balíčku apache2-utils), je možné použít některý z online generátorů:

http://www.htaccesstools.com/htpasswd-generator/

Použití online generátoru však může představovat riziko, nelze poskytnout žádnou záruku, že si autor takového generátoru jména a vygenerovaná hesla neukládá.

Rewrite pravidla

Modul Rewrite umožňuje přesměrovávat, podstrkávat a upravovat URL. Jeho možnosti jsou velmi široké, následující příklady tak představují jen malou ukázku několika obvyklejších způsobů použití. Pokud budou v souboru .htaccess rewrite pravidla využívána, je nutné na jeho začátek umístit jejich povolení:

RewriteEngine On

Přesměrování na www verzi domény

RewriteCond %{HTTP_HOST} ^nejakadomena\.cz [nc]  
RewriteRule (.*) http://www.nejakadomena.cz/$1 [R=301,QSA,L]

Přesměrování na jinou doménu se zachováním parametrů za lomítkem

RewriteCond %{HTTP_HOST} nejakadomena\.cz [NC]  
RewriteRule ^/(.*)$ http://jinadomena.cz/$1 [R=301,QSA,L]

Jednoduché podstrčení

RewriteRule   pozadovany\.php   /podstrceny.php  
RewriteRule   ^pozdadovana-stranka /podstrcena.php  
RewriteRule   ^pozdadovany-obsah /index.php?stranka=pozadovana  
RewriteRule   ^novinky/ /index.php?page=novinky&strana=1&razeni=nejnovejsi

Podstrčení hezčí a lépe zapamatovatelné URL s proměnnou

Následující pravidlo umožní, že "hezká" URL www.nejakyeshop.cz/vysavac-23 je interpretována jako www.nejakyeshop.cz/index.php?kategorie=produkty&typ=vysavace&id=23:

RewriteRule    ^vysavac-(.*)    index.php?kategorie=produkty&typ=vysavace&id=$1 [QSA,L]

Rozdíl mezi podstrčením a přesměrováním je ten, že při podstrčení zůstává požadovaná URL nezměněná, ale klientovi je zobrazen obsah té podstrčené při stavovém kódu HTTP 200 OK.
Přesměrování naopak URL přepíše a vrátí kód HTTP 301 nebo 302.

Další příklady a možnosti využití naleznete v dokumentaci:
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Přesměrování

Dále je možné nastavit klasické přesměrování bez použití mod_rewrite:

Redirect 301 /starysoubor.php /novysoubor.php  
Redirect 301 /stara_stranka.html http://www.nejakadomena.cz/nova-stranka/

Vlastní chybové hlášky

Pomocí .htaccess je také možné nastavit vlastní chybové stránky, například takto:

ErrorDocument 401 /chyby/vyzadovana_autorizace.php  
ErrorDocument 403 /chyby/pristup_odepren.php  
ErrorDocument 404 /chyby/nenalezeno.php  
ErrorDocument 500 /chyby/interni_chyba_serveru.php  
ErrorDocument 503 /chyby/docasne_nedostupne.php

Povolení procházení adresáře (directory listing)

Standardně je nastaveno, že při pokusu o přístup do adresáře, kde chybí index.php je klient odmítnut s hláškou 403 Forbidden. V některých situacích může být žádoucí, aby se obsah adresáře namísto toho vypsal a bylo možné otevírat jednotlivé soubory v něm obsažené.

Option +Indexes