Použití souboru .htaccess

Pátek, 5. Září 2008 · 26 comentářů

V dnešním článku si řekneme něco o .htaccess. Nejprve si řekneme jak takový soubor .htaccess vytvořit. Poté si ukážeme příklady nastavení a řekneme si jejich využití. Všechno pěkně stručně a jasně.

Pár slov úvodem…

Co je to .htaccess?

Soubor .htaccess je konfigurační soubor serveru. Nejčastěji se využívá pro vytvoření vlastní chybové stránky nebo pro zablokování výpisu složky. Jde s ním, ale nastavovat mnohem více věcí.

K čemu .htaccess slouží?

Soubor .htaccess slouží k mnoho nastavení našeho webu. Jedinou podmínkou je jeho podpora na straně serveru. Pomocí tohoto souboru můžeme například vytvářet vlastní chybové stránky, přesměrování, ochranu webu heslem, blokování přístupu na naše WWW podle IP adres nebo k nastavení výchozího souboru (index.html).

Jak vytvořit soubor .htaccess?

Nevíte jak vytvořit takový soubor .htaccess? Je to jednoduché. Soubor .htaccess je normální textový dokument. Vytvořte jej (například pomocí Poznámkové bloku) a uložte ho pod názvem „.htaccess“ (včetně tečky).

Postup uložení přes Poznámkový blok:
1) Otevřete si Poznámkový blok.
2) Klikněte na: Soubor – Uložit jako…
3) Do pole „Název souboru“ napište: „.htaccess“ (bez uvozovek).
4) Do pole „Uložit jako typ“ vyberte „Všechny soubory“.

Typy pro Váš .htaccess soubor:

  • Jestli chcete soubor vidět ve svém FTP klientu, musíte si zapnout možnost zobrazení skrytých souborů (Pokud používáte Total Commander: Síť – FTP – zobrazit skryté soubory).
  • .htaccess nemá žádnou příponu. Soubor s názvem .htaccess.txt je špatně. Pokud Vám soubor .htaccess nejde vytvořit uložte jej jako htaccess.txt a ve vašem FTP klientu jej přejmenujte na .htaccess.
  • Pro komentáře se používá znak # na začátku řádku.
  • Soubor .htaccess se vkládá do kořenového adresáře (bude platit pro celý web).
  • Chcete, aby Váš soubor .htaccess platil pouze pro určitý adresář? Vložte jej do něj.

Nejčastější příklady použití .htaccess

# Blokování přístupu podle IP adres

deny from 123.123.123.123
- Číslo je IP adresa, kterou chcete zablokovat přístup na Vaše stránky.
deny from 111.123
- Zablokujete přístup ze všech adres, které začínají 111.123
deny from all
- Zablokujete přístup celého adresáře.
allow from 123.123.123.123
- Povolíte této IP adrese vstup na Vaše stránky.

# Chybové stránky

ErrorDocument 403 "http://example.cz/chyba-403.html"
ErrorDocument 404 "http://example.cz/chyba-404.html"

- Zobrazí vlastní chybové stránky.
- Co znamenají čísla chybových hlášek najdete zde.

# Index stranka

DirectoryIndex index.php index.html
- Určujete na jaký soubor bude uživatel přesměrován pokud navštíví Vaší stránku (přednastaveno je index.php nebo index.html).

# Ochrana proti SPAM botům

RewriteCond %{HTTP_USER_AGENT} Wget [OR]
RewriteCond %{HTTP_USER_AGENT} CherryPickerSE [OR]
RewriteCond %{HTTP_USER_AGENT} CherryPickerElite [OR]
RewriteCond %{HTTP_USER_AGENT} EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ExtractorPro
RewriteRule ^.*$ http://www.spampoison.com/ [L]

- Tento kód odhalí většinu SPAM botů, které přesměruje pryč.
- Tento kód přesměruje SPAM bota na adresu spampoison.com.

# Přepis z /něco.php na /něco

RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]
RewriteRule ^([\w-]+)$ /$1.php [L,QSA]

- Tento kód pomocí .htaccess upravuje všechny adresy.
- Všechny adresy budou nyní zobrazovány na webu bez přípony .php
(na části Vašeho webu odkazujte bez .php).

# Přepíše něco-někde.php na /něco/někde

RewriteRule ^něco/někde$ /něco-někde.php

# Přepis z /index.php?stranka=novinky na /novinky.html

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} ^(.*).html
RewriteRule ^(.*).html index.php?stranka=$1 [nc,L,QSA]

# Přesměrování webu bez WWW na verzi s WWW

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

# Přesměrování webu s WWW na verzi bez WWW

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.vase-domena\.cz [nc]
RewriteRule (.*) http://vase-domena.cz/$1 [R=301,L]

# Přesměrování z 1.php na 2.php

RewriteEngine On
RewriteRule 1\.php /2.html [R=301]

# Povolení výpisu adresáře

Options +Indexes
- Uživatel uvidí soubory vložené na Vašem webu.
- Zápisem Options -Indexes se výpis složky zakáže.

# Zakázání hotlinkování obrázků a videí

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?neco\.cz [NC]
RewriteRule \.(jpg|png|gif|mp3|mpg|avi|mov)$ - [F]

- Zakáže hotlinkování obrázků a videí z jiných stránek (i vyhledávačů).
- Výrazně sníží vytížení serveru a zamezí zobrazování fotek na jiném než Vašem webu.

# Zakázání výpisu adresáře

Options -Indexes
- Uživatel se při snaze dostat se do některého adresáře bude přesměrován na chybovou stránku 403.

# Zaheslování stránky pomocí .htaccess

AuthUserFile /data/www/www_example_cz/.htpasswd
AuthName "Restricted Area"
AuthType Basic
require valid-user

- Tento kód zašifruje celý web www.example.cz.
- Více najdete v článku Zaheslování stránek pomocí .htpasswd zde na blogu.
- Zašifrování svého hesla a jména můžete provést na této stránce.

# Zapnutí Rewrite Modu

RewriteEngine On
- RewriteEngine On se zadává do .htaccess jen jednou!

{ 26 komentáře… přečtěte si je níže nebo přidejte vlastní }

1 Patrik Humpolec Pondělí, 9. Únor 2009 v 17:02

Užitečné, tvoje články se mi líběj, jen tak dál ;)

Odpovědět

2 Tomáš Erlich Pondělí, 9. Únor 2009 v 19:18

Nemám to teď zrovna jednoduchý a právě tohle mi dodává sílu.
Díky za tvůj čas. Drž se kámo!

Odpovědět

3 LubosP Čtvrtek, 7. Květen 2009 v 12:42

Zajímavý stránky máš, zrovínka informace o zaheslování se mi hodí, neměl bys ještě nějakej návod na odchod ze zaheslovaný sekce webovek tak, aby si prohlížeč heslo nepamatoval a bylo vynucený další přihlášení? = Ve Firefoxu musím vždycky ručně vymazat Relace s Autentizací, aby to příště požadovalo heslo, takhle by se mi mohlo stát, že si osobní sekci otevřu někde na veřejným, nebo cizím místě a zapomenu to vymazat a tím jsem zpřístupnil tuhle sekci pro kohokoliv … každá rada bude dobrá :-)

Odpovědět

4 Tomáš Erlich Čtvrtek, 7. Květen 2009 v 13:31

Podle mého názoru je nejbezpečnější způsob zaheslování stránky pomocí .htaccess, jak popisuji v tomto článku. Zašifrované jméno a heslo si můžeš vygenerovat na této adrese, nebo si tento skript můžeš vytvořit sám pomocí článku zašifrování hesla pro .htpasswd. Pokud ti tento způsob nevyhovuje, doporučuji si přečíst článek od Dušana Janovského zaheslování stránek, který ti určitě pomůže. Hodně štěstí!!

Odpovědět

5 LubosP Čtvrtek, 7. Květen 2009 v 14:24

Rozumím, nepřu se o bezpečnost :-) … jen jsem byl zvědavej na možnost nějakýho logoutu. Jak jsem tak procházel různý fóra, zdá se, že jednoduchej logout pro htaccess neexistuje, tak mě zajímá nějaký dobrý vtip, jak na to, jinak je tu podle mýho velký nebezpečí lidskýho faktoru a že blbost je mocná …

Odpovědět

6 Tomáš Erlich Sobota, 9. Květen 2009 v 10:05

Standardně se uživatel odhlásí zavřením okna prohlížeče. Pak už jen záleží na tom, jak dlouho si heslo má prohlížeč pamatovat. To si musíš nastavit sám. Pokud ovšem trváš na svém .htaccess log-outu, našel jsem pro tebe nějaké návody.

Jeden zajímavý návod se objevuje na interval.cz. Odhlášení z HTTP autentizace, ale to jsi si asi již přečetl. Jestli ti tenhle způsob nevyhovuje, navrhuji hledat někde v zahraničí. Já osobně našel jeden funkční .htaccess LogOut. Najdeš ho na adrese http://www.webmasterworld.com/forum13/3147.htm.

Odpovědět

7 Charlie Úterý, 12. Květen 2009 v 15:37

Jde také pomoci .htaccess sledovat IP adresy lidí, kteří přistupují na dané stránky (příp. do daných složek) ?

Odpovědět

8 Tomáš Erlich Středa, 13. Květen 2009 v 15:47

Zablokovat IP adresu určitě, ale sledovat? To asi ne. Nevím o tom a připadá mi to zbytečné. K tomu ti přece stačí jakékoliv počítadlo.

Odpovědět

9 :) Sobota, 31. Říjen 2009 v 9:56

No jo, ale co když postnu link třeba na nějakej soubor na serveru a chci logovat ty, který k souboru přistoupí.

Odpovědět

10 Tomáš Erlich Sobota, 31. Říjen 2009 v 12:31

Do .htaccess bych zapsal:
RewriteCond ! ^raw/.*$
RewriteRule ^.*$ log/log.php?page=$0 [L,P]

a do log.php:
echo file_get_contents('http://' . $_SERVER['HTTP_HOST'] . '/raw' . $_GET['page']);

Odpovědět

11 Jakub Hejda Středa, 15. Červenec 2009 v 21:23

Šikovnej článek. Může dobře posloužit jako takový tahák pro nás líné si něco pamatovat ve vlastní hlavě.

Ochrana proti SPAM botům mi přijde možná trochu neúčinná páč by těch řádků mohlo být za chvíli tisíc a pořád by jich nebylo dost, ale je to dobrý modelový příklad.

Odpovědět

12 Tomáš Erlich Čtvrtek, 16. Červenec 2009 v 10:34

Díky. Jsem rád, že článek dobře slouží. Ono všechno si pamatovat je otrava. Lepší je, když je to někde napsané a můžeš si to kdykoliv přečíst :-)

PS: Ohledně toho spamu je to těžký. Jak jsi řekl – je to spíš příklad. Spam je prostě sv*ně xD

Odpovědět

13 Masterbill Neděle, 2. Srpen 2009 v 9:56

Jaká je funkčnost té antispamové ochrany?

Odpovědět

14 Tomáš Erlich Pondělí, 3. Srpen 2009 v 11:53

No. Měla by odhalit většinu SPAM botů a přesměrovat je pryč z webu. Takže pak můžeš klidně na stránky psát svůj mail a žádných spamů se bát nemusíš (mě chodí maximálně 2-3 za týden).

Odpovědět

15 Jackm Sobota, 19. Září 2009 v 12:13

Dobrej článek… ;-)

Odpovědět

16 Tomáš Erlich Čtvrtek, 24. Září 2009 v 12:08

Díky! Snažil jsem se ohledně použití souboru .htaccess napsat maximum. Sám jsem před lety něco podobného hledal a nic. Nikde nebyl takovýto článek, který by všechno jasně a stručně popisoval a tak jsem ho napsal :)

Odpovědět

17 Nouma Úterý, 20. Říjen 2009 v 0:18

Filtrovat Wget jako ochranu před spam botem je IMHO kravina. Spousta lidi Wget (program) používá pro normální stahování (ať jeho grafické nástavby nebo Wget samotny). Navíc bych tipoval, že každý normálně uvažující tvůrce spambota si USER AGENT string změní na Gecko, nebo MSIE. Takže o zázračné funkčnosti zmíněného řešení mám vážně pochybnosti.

Ale jinak hezky článek – hodil se mi, jen by si to snad zasloužilo zmínit nejen „co“ to dělá, ale občas naznačit i „jak“ (například zmínka o regulárních výrazech).

Odpovědět

18 Tomáš Erlich Středa, 21. Říjen 2009 v 19:01

Nemám co bych k tomu dodal. Snad jen díky za pochvalu a rady. Vědět, co určitá věc dělá je užitečné, ale nevědět proč. To je dost trapné – takže ještě jednou díky za komentář. U dalších článků to vezmu na zřetel :)

Odpovědět

19 Rusttaf Úterý, 17. Listopad 2009 v 19:10

Ahoj, moc pěkně sepsaný příklady jak použít .htaccess. Měl bych jeden problémek, kterej bych rád konzultoval. Pro můj portál mám udělaný nastavení, který mám normálně přístupný na adrese: http://www.moje-domena.cz/sprava-portalu. Chtěl bych do něj ale přistupovat z jiný adresy, řekněme: nastaveni.moje-domena.cz a tu původní adresu prohlížeči jenom podstrčit. Zkoušel jsem:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^nastaveni\.moje-domena\.cz
RewriteRule (.*) http://www.moje-domena.cz/sprava-portalu/$1 [nc, L, QSA]

Nefunguje to podle mých představ. Adresa se plně přesměruje. Jak to prosím nastavit, aby to fungovalo jenom jako podstrčení?

Odpovědět

20 Tomáš Erlich Neděle, 22. Listopad 2009 v 14:23

Ahoj.
To, co tu píšeš je obyčejné přesměrování pomocí souboru .htaccess. Tedy přesun – ne podstrčení. Ty ovšem chceš stránku jen podstrčit. Provedeš to jednoduchým zápisem:
RewriteEngine on
RewriteRule 1\.html /2.html

Kdy 1.html je stránka falešná a 2.html je stránka podstrčená (která se zobrazuje).

Odpovědět

21 spoon Úterý, 29. Prosinec 2009 v 0:38

Ať čtu jak čtu pořád tomu nerozumím. Achjo. To bude zase pokus / experiment. Lol.

Odpovědět

22 Moretti Úterý, 19. Leden 2010 v 17:59

Dobrý den.
Nebo Ahoj, to podle toho co je vám milejší. Prosím o radu. Potřebuji udělat přesměrování pomocí htaccess. A sice například aby se http://****.eu přesměrovalo na http://****/phpBB3.

Přesměrování z non www na s www už je řešený aliasem u poskytovatele domény (forpsi). Moc děkuji.

Odpovědět

23 Tomáš Erlich Středa, 10. Únor 2010 v 13:13

Ahoj je milejší. Tohle přesměrování je popsáno v článku. Stačí číst a trochu si ho poupravit. Ještě o tom chci napsat článek. Takže teď k problému – jestli chceš trvalé přesměrování tak použij tohle:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^****\.eu
RewriteRule ^(.*)$ http://****/phpBB3/$1 [R=301,QSA]

Odpovědět

24 Moretti Středa, 10. Únor 2010 v 23:27

Děkuji. Skusím. Ono je možný, že to poskytovatel hostingu zakázal :).

Odpovědět

25 Moretti Čtvrtek, 11. Únor 2010 v 5:12

Ahoj. Tak první verze, tzn vw-life.eu místo hvězdiček nefungoval. Druhá verze, která byla i s www taky neuspěla. V tu chvíli zas IE8 hlásil, že nemůže zobrazit tuhle stránku. Tohle:
RewriteEngine On
RewriteCond ^www\.vw-life\.eu
RewriteRule ^(.*)$ http://www.vw-life.eu/phpBB3/$ [R=301,QSA]

zas hodí chybu 500.

Odpovědět

26 Tomáš Erlich Čtvrtek, 11. Únor 2010 v 13:28

Tento způsob by měl být funkční. Kontaktuj technickou podporu tvého hostingu a všechno jim tam popiš. Měli by ti poradit. Hodně štěstí!

Odpovědět

Vložit komentář

Můžete použít tyto HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Předchozí příspěvek:

Následující příspěvek: