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í }
Užitečné, tvoje články se mi líběj, jen tak dál ;)
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!
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á :-)
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í!!
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á …
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.
Jde také pomoci .htaccess sledovat IP adresy lidí, kteří přistupují na dané stránky (příp. do daných složek) ?
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.
No jo, ale co když postnu link třeba na nějakej soubor na serveru a chci logovat ty, který k souboru přistoupí.
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']);Š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.
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
Jaká je funkčnost té antispamové ochrany?
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).
Dobrej článek… ;-)
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 :)
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).
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 :)
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 onRewriteCond %{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í?
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 onRewriteRule 1\.html /2.html
Kdy 1.html je stránka falešná a 2.html je stránka podstrčená (která se zobrazuje).
Ať čtu jak čtu pořád tomu nerozumím. Achjo. To bude zase pokus / experiment. Lol.
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.
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 OnRewriteCond %{HTTP_HOST} ^****\.eu
RewriteRule ^(.*)$ http://****/phpBB3/$1 [R=301,QSA]
Děkuji. Skusím. Ono je možný, že to poskytovatel hostingu zakázal :).
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 OnRewriteCond ^www\.vw-life\.eu
RewriteRule ^(.*)$ http://www.vw-life.eu/phpBB3/$ [R=301,QSA]
zas hodí chybu 500.
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í!