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 stránka
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.
# Zakáže přístup (stažení) ke všem souborům .txt
<filesmatch "\.(txt)$">
order allow,deny
deny from all
</filesmatch>
- Soubory s touto koncovkou nepůjde zobrazit ani jakkoli stáhnout
- Při pokusu o stažení se zobrazí chyba 403 – přístup odepřen
# 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 (podstrkávání)
RewriteEngine On
RewriteRule 1\.php /2.php [R=301]
- Známé také jako podstrčení stránky (to je ta druhá)
# 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!
{ Komentáře k článku }
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.
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.Pokud ti tento způsob nevyhovuje, doporučuji si přečíst článek 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, 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 této adrese.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:a do log.php:
Š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 adresemoje-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: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:Kdy 1.html je stránka falešná a 2.html je stránka podstrčená (která se zobrazuje).
Díky za odpověď, ale tohle pro mě asi nebude úplně ideální.
Asi jsem to nenavrhnul úplně správně, ale mám přibližně takovouhle strukturu:
[moje-domena.cz] – kde jsou stránky a sdílený věci jako CSS a další a mimo to tam kvůli sdílení dat je taky adresář /nastaveni, kde je vlastně samostatná součást webu, kde řeším administraci
[nastaveni.moje-domena.cz] – je subdomena, kde kde jsem doufal, že bych administraci řešil (kvůli https), ale protože nechci udržovat sdílěný data na 2 místech, tak je celá ta část zatím právě v adresáři /nastaveni
Idealni stav je teda dakovej, ze nekdo zada napr.:
nastaveni.moje-domena.cz/uzivatele.html
a ono ho mu to podstrci
moje-domena.cz/nastaveni/uzivatele.html
(i vcetne GET dat za ?)Pokud to takhle nejak pujde udelat pomoci
.htaccess
, tak parada, pokud ne, tak to musim celkem dost predelat…V kazdym pripade diky za pomoc
Promiň, ale jsem teď trošku vedle. Píšu seminární práci a mám plnou hlavu jiných věcí. Zkus napsat na nějaké fórum (a oni ti doufejme poradí). S tímhle si nevím rady – možná to bude jednoduché, ale v tenhle moment opravdu netuším.
I tak děkuju.
Zkusím to ještě jinak.
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
****.eu
přesměrovalo na****/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. 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:
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:
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í!
Moc pěkný článek, který mi osvětlil věci, které jsem nevěděl.
Měl bych jednu otázku: Jak by šlo udělat, aby htaccess chránil nějaký adresář heslem jak je popsáno výše, ale z některých IP adres by byl přístup bez omezení (bez nutnosti zadávat heslo)?
Děkuji za radu
Díky :). Jak udělat výjimku, která nebude muset zadávat heslo u zaheslované stránky nevím. Nic mne nenapadá. Zkus se zeptat na fóru Jak psát web.
Ahoj,
měl bych ještě jeden, míň záludnej dotaz:
potřeboval bych přesměrovávat odkazy na obrázky asi tímhle způsobem:
zobrazena adresa: data.domena.cz/obrazky/obrazek.jpg
skutečná adresa: xyz.domena.cz/obrazky/obrazek.jpg
zkoušel jsem tohle:
RewriteRule ^data.domena.cz/(.*).png xyz.domena.cz/$1.png
ale nefunguje to ani v různých variacích.
Promiň, ale tohle mi přijde vážně hloupé. Proč to prostě nenecháš jak to je? Pamatuj, že htaccess se načítá při každém (!) načtení stránky. Pokud tam budeš mít hromady kravin, stránky budou pomalejší. Opravdu něco takového potřebuješ?
Subdomenu xyz jsem chtěl mít schovanou jenom pro administrátory. Je ale fakt, že by to asi hodně zatížilo server…
Zas tolik ne, je to maličkost, ale právě i málo se počítá. Mě to přijde zbytečné, prostě nic neskrývej. Pokud chceš, aby se do adresáře nikdo nedostal – udělej to přes htaccess.
Super, díky moc, konečně mi to funguje, ode dneška tě mám v oblíbených a svoje návštěvy k tobe na web zintenzivním, opravdu díky moc :).
Potřeboval bych se zeptat jestli přes tyto nastavení jde i nastavit ikona která je vedle adresy-,
Chvilku jsem přemýšlel, co to vůbec po mě žádáš a už asi vím. Máš na mysli Favicon? Takový ten obrázek před adresou. Pokud ano, Dušan Janovský na svém webu už dávno napsal hezký návod, který by ti mohl pomoci.
Lze takto i přesměrovat na subdoménu na jiném serveru, který má jen veřejnou IP? Ale tak, aby byla serveru poslána doména, ne IP?
Např. toto – subdoména má být pobocka.firma.cz a ta je na jiném server s vlastní IP, jde to vůbec aby po přesměrování bylo v adrese pobocka.firma.cz a ne IP na které to běží? Díky.
Prosím o pomoc s hledáním chyby. Tohle mi podle posledního RewriteRule přesměrovává i URL, které mají v zápisu „load=“ nebo „access=1″ a nevím proč. „Dealera“ to přesměrovává v pohodě.
Uvítám i případná zjednodušení.
Ahoj, hezký článek. Měl bych taky jeden dotaz. Mám zaheslovanou stránku pomocí
.htaccess
a.htapasswd
je možné aby když se přihlásí například uživatel karel přesměrovalo ho to na karel.php a když se přihlásí pepík na stránku pepil.php. Díky moc…caute, hej pls potreboval bych poradit jak zablokuju pristup jedne IP pres htaccess! nevim co tam mam napsat do toho souboru
.htaccess
, ktery mam nahrany na webe. pls poradte jak to bloknu tu ip…Třeba takhle:
deny from ip_adresa
.# Prístup majú všetci
# Prístup majú iba určité IP
# Prístup nemá nikto
# Prístup má zakázaný (napríklad Ban)
Úžasné stránky, přesto mi cosi nejde. Když vše nachystám jak je tu popsané, tak při prvním přihlašování do „zaheslovaného“ podadresáře se dotazovací okno otevře, ale po vyplnění mi vyskočí chyba 500 – vnitřní chyba serveru. Je to asi tím, že neumím spustit soubor s phpinfo(), abych měl jasnou informaci o cestě k adresáři. Předpokládám, že PHP scripty musí být na serveru povoleny a to netuším jak zajistit. Moc děkuji za navedení…
Dobrý den,
jsem trošku v háji. Zápis od zápisu se to zde snažím pochopit, ale nedaří se :-/ Přitom potřebuji jen takový zápis, který mi uděla z mých poněkud odstrašujících URL takové, které se sluší a patří. Prosím o pomoc, zda-li si někdo víte s touto „prkotinou“ rady, tak se prosím ozvěte. Díky moc :-).
Dobrý den. Potřeboval bych radu… 2 weby na stejném hostingu… jeden primární a jeden jako alias. Ten primární běží standardně ze složky /www/, ale ten druhý (alias) běží z /www/domains/adresa.webu. Ve složce /www/ mám htaccess, který mi standartně ovlivňuje i podsložky (právě že i druhý web). V www/domains/adresa.webu mám druhý htaccess, ale jeho funkčnost je stejně přepsaná tim prvnim htaccessem. Jak do prvního htaccess zapsat, aby určitý zápis neplatil pro www/domains/? Nebo naopak jak zapsat, aby příkaz platil jen v určitých adresářích? Moc by mi to pomohlo, děkuji. Jindra.
Nejlepší bude přesunou web jinam. Prostě udělat složky jinak. Teď máte hlavní web naházený v hlavní složce www – tak udělejte novou, znovu „www“ a tam web přesuňte. Takže hlavní web poběží v /www/www/ a druhý web v /www/druhy.web/ – chápete? Každá doména tedy běží ve své složce a nebudou se nijak ovlivňovat. Jiný řešení neznám a nedokážu víc poradit. Soubor HTA zkrátka ovlivňuje vše pod ním kde je vložen, o deaktivaci nic nevím.
Vyřešeno, moc děkuji za rady :). Nakonec mě vaše řešení napadlo ještě dříve než jsem si ho přečetl a funguje :).
Přeju hezký den.
Prosím o radu, kde najdu svou IP adresu, dala jsem si do htaccess svoji abych se nemusela logovat do zaheslovaneho webu i ja sama, ale nefunguje to.
Zapsala jsem allow from a IPv4 adresu z vypisu pripojeni, ale jsem pres router, prosim o radu jak najdu tu spravnou tuto mi to nebere a nepovoli mi pristup bez zaheslovani, nebo sem to pochopila spatne, a je to blokovani IP adres vztazeno jen na situaci az po nalogovani?
Dekuji za rady.
Nemám tušení, ale svou IP adresu najdete tady :). Takovýhle věci jsem nikdy opravdu nezkoušel a už dělám úplně něco jiného. Nejlepší bude zkoušet. Každopádně myslím, že heslo bude třeba pořád.
Komentáře jsou pro tento článek již uzavřeny.