Soubor .htaccess je zvláštní textový soubor určený k tomu, aby si autor stránek (tedy ten, kdo na server normálně jen kopíruje stránky) mohl sám upravit některé vlastnosti serveru bez toho, aby o to žádal správce. Soubor .htaccess může fungovat na serveru Apache (Apache dnes běží na většině webových serverů).
Server Apache se obvykle konfiguruje pomocí souboru httpd.conf. Tento soubor httpd.conf leží kdesi na serveru a má k němu přístup jenom administrátor serveru. To je organizačně náročné, proto vznikla možnost používat .htaccess. Soubor .htaccess umístěný v určitém webovém adresáři dovoluje autorovi webu upravit chování adresáře stejnými instrukcemi, které se normálně píšou do httpd.conf. (Soubory httpd.conf a .htaccess mají tedy společný jazyk (vzdáleně se podobá XML).) Adresář se potom bude chovat jinak, aniž by to správce serveru musel sám nastavovat.
Vlastní chybová stránka je dobrý příklad věci, která se musí udělat na serveru -- jsou to prostě věci, které žádným html zápisem nebo třeba javascriptovým trikem udělat nejdou. Na to je přesně .htaccess.
Jak na to: Vedle svých webových html souborů si vytvoříte soubor s názvem .htaccess. Bude to obyčejný texťák. Do něj napíšete například tento jediný řádek:
ErrorDocument 404 /chybovka.html
Soubor uložíte a nakopírujete ho na server (stejně jako stránku chybovka.html).
Když potom na vašich stránkách někdo požádá o stránku, která neexistuje, místo standardního hlášení "404 not found" se mu zobrazí to, co napíšete do souboru chybovka.html. Název souboru a to, co do něj napíšete za moudra, je samozřejmě na vás. (Podrobnější návod na ErrorDocument)
Ano, opravdu tam ta tečka na začátku jména .htaccess je. V některých operačních systémech (tj. na Linuxu, Unixu a na jejich klonech) se soubory začínající tečkou považují za skryté. To odpovídá logice souboru .htaccess -- je skrytý a uživatel se na něj nedívá.
Pokud na server budete .htaccess kopírovat přes FTP, je hodně pravděpodobné, že na straně serveru ten soubor .htaccess neuvidíte, i když jste jej tam nakopírovali. Nenechte se zmást -- je jenom skrytý. Záleží jen na inteligenci vašeho ftp klienta (programu), jestli se vám jej podaří zobrazit. Například v programu Total Commander se .htaccess dá zviditelnit příkazem Síť > FTP - ukázat skryté soubory.
Stejně tak tento soubor .htaccess nemá příponu (to jenom Windows si myslí, že každý soubor příponu mít musí). Všechna písmena jména souboru .htaccess se musejí psát malými písmeny. Na Windowsech není vytvoření souboru s tečkou na začátku zrovna snadné. Například při ukládání z Poznámkového bloku musíte jako název souboru zadat ".htaccess" i s těmi uvozovkami. Jednodušší je vytvořit soubor z konzoly (cmd), ale to ne každý umí. Pro usnadnění práce si tedy můžete ukázkový soubor stáhnout v zipu.)
Další informace o tečkách v názvech souborů.
Ne. Nutné podmínky funkčnosti instrukcí ze souboru .htaccess:
I když .htaccess funguje, mohou být některé věci nefunkční. Spousta funkčností totiž závisí na modulech, které jsou na serveru nainstalované. Pokud na serveru například není nainstalovaný mod_rewrite, nemá smysl do .htaccess psát instrukce pro mod_rewrite. Buďto nebudou fungovat, nebo to bude házet chyby.
Jestli je na vašem webovém serveru použití souboru .htaccess povoleno, se dozvíte od správce svého serveru. Správce stejně tak bude vědět, co funguje a co ne. Někdy je ale jednodušší a rychlejší to vyzkoušet -- pokud budou instrukce z .htaccess fungovat, tak fungují. Když ne, tak nefungují.
Jestliže něco, co nefunguje, potřebujete nutně, můžete správce serveru přemluvit, nebo změnit hosting. Podle mých zkušeností -- když se vezmou hostingy, kde .htaccess funguje a nefunguje, tak to je tak půl napůl. Kupříkladu nejoblíbenější český bezplatný hosting webzdarma.cz .htaccess podporuje. Správce serveru má obvykle raději, když .htaccess povolen není, protože se tím v jeho očích snižuje riziko, že se něco podělá (a také je zřejmé, že bez povolení .htaccess funguje server rychleji, protože se pak nemusí hledat v každém adresáři).
Také se můžete setkat se situací, kdy admin použití .htaccess povolí, ale chce obsah souboru napřed zkontrolovat.
Na serveru můžete mít více souborů .htaccess -- v každém podadresáři svého webového prostoru jeden (nemusíte tam mít žádný). Tento soubor .htaccess bude určovat chování svého adresáře a všech jeho podadresářů.
Působnost instrukcí z .htaccess se dědí do podadresářů, což je důležité.
Někdy to dědění do podadresářů vadí. Pak se to dá přebít. Když máte na nejvyšší úrovni .htaccess, který například určuje jednu chybovou stránku, v podadresáři můžete použít jiný .htaccess, kterým nastavíte jinou chybovou stránku. Tato jiná chybová stránka vyhraje, protože bližší košile než kabát.
Omezím se na příklady, co lze v .htaccess nastavit:
Prostě všechno, co se dá nastavit na serveru v httpd.conf, může admin serveru povolit, že to půjde nastavit i v .htaccess.
Sice plánuju, že s udělám samostatnou stránku příkladů, ale v tuhle chvíli stíhám tak akorát nakopírovat sem svou verzi souboru .htaccess ze stránek Jak psát web. Chytrému napověz, blbého kopni -- takže vám to ... napoví:
# toto je soubor .htaccess, který určuje chování adresáře a podadresářů (jiný
.htaccess v podadresáři má prioritu)
# stranka s chybovym hlasenim pro chybu 404 - nenalezen
ErrorDocument 404 /etc/404.html
ErrorDocument 403 /etc/403.html
# nastaveni vychozi stranky adresare
DirectoryIndex start.html index.html index.php
# povoleni zobrazeni obsahu adresare, pokud chybi vychozi soubor
Options +Indexes
####### Redirect na verzi domény s www ######
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^jakpsatweb.cz
RewriteRule (.*) https://www.jakpsatweb.cz/$1 [R=301,QSA,L]
####### Redirecty ruznych stranek #######
# syntaxe:
# Redirect kód relativní-stará-adresa http://nová-adresa
Redirect 301 /css_eot.htm https://www.jakpsatweb.cz/css/css-eot-weft-font.html
Redirect 301 /css_jednotky.htm https://www.jakpsatweb.cz/css/css-jednotky.html
Redirect 301 /css_kaskadovani.htm https://www.jakpsatweb.cz/css/css-kaskadovani.html
# Automaticke redirecty
# presmerovani vsech starych adres na nove
# co konci na htm, bude koncit na html
# podtrzitko se nahrazuje minuskem
RedirectMatch (.*)_(.*)\.htm$ $1-$2.html
RedirectMatch (.*)\.htm$ $1.html
# chybne odkazy z ruznych diskusi
RedirectMatch (.*)\.html.$ $1.html
RedirectMatch (.*)\.html,$ $1.html
# Cacheovani
ExpiresActive On
# vychozi expirace 5 minut
ExpiresDefault A300
# expirace podle typu souboru:
# expiruje pocet sekund pote, kdy byl accessnut (A)
ExpiresByType application/javascript A2600000
ExpiresByType text/css A12000000
ExpiresByType image/gif A30000000
ExpiresByType image/jpeg A30000000
ExpiresByType image/png A30000000
# Komprese
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip
#Header append Vary User-Agent
# DeflateCompressionLevel 9
# DeflateFilterNote Input instream
# DeflateFilterNote Output outstream
# DeflateFilterNote Ratio ratio
Ve výše zmíněném příkladu je nastaveno kešování přes ExpiresByType. Záleží ale na nastavení serveru, co v .htaccess dovolí. Občas proto používám jiný, čitelnější zápis:
<FilesMatch "\.(ico|jpg|jpeg|png|gif)$">
Header set Cache-Control "max-age=315360000, public"
# 10 let
</FilesMatch>
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=172800, public"
# 2 dny
</FilesMatch>
Do .htaccess zkuste umístit řádek
deny from 123.156.189.123
kde to číslo je IP adresa, kterou chcete zablokovat. Blok adres se dá zablokovat zápisem
deny from 215.123
což by mělo zlikvidovat přístup ze všech adres, které začínají na 215.123. Pak se dá naopak některá adresa povolit:
allow from 215.123.156.189
Chcete-li znepřístupnit celý adresář, napište tam
deny from all
To se hodí obzvlášť v PHP aplikacích pro adresáře, ve kterých jsou data nebo includovací skripty -- nikdo z venku se na ně nedostane, ale serverový program ano.
Tohle jsem nezkoušel, ale prý na některých hostinzích funguje zápis, který z .htaccess může ovlivnit php.ini. Nejčastější změna, kterou je potřeba provést při instalaci některých skriptů v php, je zapnutí RegisterGlobals. Pokud nemáte přístup ke svému php.ini, můžete to udělat takto:
php_flag register_globals on
ale pouze v případě, že jsou na to dobře nastavena práva. Prostě to zkuste.
Většina serverů bývá nastavena tak, že pokud se do adresy napíše něco končícího lomítkem (typicky hlavní stránka), snaží se uživateli vrátit obsah souboru index.php, index.html nebo jiný. Direktivou DirectoryIndex se takové chování dá ovlivnit.
Jestliže například potřebujete, aby se uživateli vracel soubor jiného jména, použije se directoryIndex. Třeba takhle:
DirectoryIndex default.htm
Potom se bude uživateli vracet soubor default.htm. Nezobrazí se ale v adrese, bude se pouze brát obsah toho souboru.
Souborů, jejichž přítomnost se vyzkouší, může být více. Například:
DirectoryIndex start.php index.php default.htm
Kdo naopak potřebuje takové chování úplně vypnout (třeba protože používá pokročilejší přepis adres přes mod_rewrite), může použít klíčové slovo disabled:
DirectoryIndex disabled
Jak psát web píše Yuhů, Dušan Janovský. Kontakt.