.htaccess
6.3.2009
Čo je .htaccess
.htaccess je súbor a zároveň dodatočným rozšírením kofiguračného súboru webového serveru Apache. Umožňuje pozmeniť lokálne nastavenia webserveru, napr. pre danú zložku (pre www.nieco.sk/mojapodstranka nastavím iné pravidlá ako pre www.nieco.sk)
Pozor, .htaccess nefunguje všade, v konfigurácii webservera musí byť inštrukcia AllowOverride. K hlavnému konfiguračnému súboru http.conf má prístup iba správca webového serveru.
Čo dokáže
- presmerovanie
- pekné url adresy stránok (coolurl)
- vlastná chybová stránka (ako má napr. webzdarma.cz)
- ochrana adresáru heslom
- zamedzenie prístupu do zložiek
- zakázanie/povolenie prístupu určitým IP-adresám
Presmerovanie
Ak stránku meníme, stane sa, že súbory presunieme do iných zložiek. Samozrejme vnútorné odkazy stránky na nich musíme potom opraviť. Čo ale s odkazmi zvonka? Tie (väčšinou) meniť nemôžeme. Potrebujeme teda, aby návštevníkovi na požiadavku so starou adresou súboru webserver podstrčil súbor na novej adrese.
Takto to vyzerá v súbore .htaccess:
Redirect 301 /stara_stranka.htm http://www.daco.sk/nejakazlozka/sem_som_ju_presunul.html
Syntax je vskutku sebe vysvetľujúca: ak dá návštevník požiadavku na stara_stranka.htm, webserver ho presmeruje na http://www.daco.sk/nejakazlozka/sem_som_ju_presunul.html.
Číslo 301 označuje kód http hlavičky, ktorá sa posiela, znamená 'Moved permanently' – trvalo presunuté.
Ak chceme takto presmerovať viac súborov, nasúkame do .htacces viac takýchto riadkov.
CoolURL
Tu ide v podstate tiež o presmerovanie, ibaže dynamické. Chceme aby adresa, ktorú zadávame v sebe mala svoj titulok. Pripravili sme si php skript, ktorý nám stránku zobrazí, ak mu v parametroch uvedieme jej titulok.
index.php?page=clanky&dalsieparametre=ich_hodnoty&titulok=koncert-skupiny-hriankovac
Po zadaní takejto URL sa nám stránka v pohode zobrazí. Nešlo by to však aj bez tých otáznikov a ampersandov(&) ?
Isteže išlo. Do .htaccess treba pridať tieto riadky.
RewriteEngine on
RewriteRule ^clanok#(.*) index.php?page=clanky&dalsieparametre=ich_hodnoty&titulok=$1
Kód v tomto prípade nahradí retacez $1 v cieľovej adrese, všetkým, čo bolo za mriežkou v požiadavke.
http://daco.sk/clanok#koncert-skupiny-hriankovac
teda preloží ako http://daco.sk/index.php?page=clanky&dalsieparametre=ich_hodnoty&titulok=koncert-skupiny-hriankovac
Syntax príkazu RewriteRule využíva gramatiku regulárnych výrazov(skr. Regex), ktorá sa nedá vysvetliť v pár vetách. Ide však o veľmi mocný a používaný nástroj, takže sa s ním programátor skôr-či-neskôr stretne. Možno v ďalšom článku. Táto technika sa nazýva aj mod_rewrite.
Vlastná chybová stránka
Tá sa v .htaccess dá nastaviť veľmi jednoducho.
ErrorDocument 404 /chyba.html
kde chyba.html je stránka, ktorá sa má zobraziť. Čo znamená 404? Je to znovu kód http hlavičky, ktorý oznamuje Not Found (stránka nenájdená).
Kompletný zoznam kódov nájdete na abowe.brbla.net
Vtipne graficky spracované sú flickr.com
Ochrana adresára heslom
V adresári, ktorého prístup chceme ochrániť heslom vložíme do súboru .htaccess nasledovné:
AuthUserFile /absolutna/cesta/k/vasmu/.htpasswd
AuthName "Sukromne data"
AuthType Basic
require valid-user
AuthUserFile - popisuje cestu k súboru .htpasswd
AuthType Basic - definuje zpôsob autorizácie
AuthName - meno chráneniej oblasti
require valid-user - pustí len uživateľov so správným loginom a heslom
Ďalej je treba na adrese, ktorú ste zadali v .htaccess vytvoriť súbor .htpasswd, ktorý bude obsahovať prihlasovacie meno a heslo. Môže obsahovať i viac kônt.
uzivatel1:zasifrovane_heslo1
uzivatel2:zasifrovane_heslo2
uzivatel3:zasifrovane_heslo3
uzivatel4:zasifrovane_heslo4
Áno, do .htpasswd treba vkladať heslo zašifrované. Zašifrované pomocou php funkcie crypt. Na zistenie šifru prislúchajúcu k vášmu menu a heslu nepotrebujete vedieť php, existujú stránky, ktoré vám šifru vygenerujú. (napríklad http://www.euronet.nl/~arnow/htpasswd/ či http://home.flash.net/cgi-bin/pw.pl)
Pre uživateľov admin s heslom password a martin s heslom kukucin by vyzeral súbor .htpasswd nasledovne:
admin:cGyUX9QugYMgE
martin:a3hbDRBEAtqS6
Zamedzenie prístupu do zložiek
Stane sa, že chceme v súborovom systéme webu ukladať súbory, ku ktorým má mať prístup server (a príp. serverový skript), ale pre návštevníka majú byť neprístupné. Môže sa jednať napríklad o uživateľské kontá, ich heslá a ďalšie vnútorné dáta stránky. Nieje nič jednoduchšie ako vložiť do daného adresára súbor .htaccess a v ňom:
deny from all
Blokovanie/povolenie určitých IP
Ak chceme zablokovať určitú IP-adresu v prístupe k súborom zložky, zapíšeme:
order allow,deny
deny from 83.222.23.219
allow from all
Prvý riadok oznamuje, že najprv sa povoľuje a potom zakazuje. Najprv sa teda vykoná allow from all, teda povolia sa všetci, z toho sa však následne vylúčia prístupy z ip adresy 83.222.23.219.
Zákazy sa dajú uplatniť i na celé rozsahy IP adries: Tento kód nám zablokuje všetky adresy od 83.222.23.0 po 83.222.23.255.
deny from 83.222.23
Môžme však použiť i opačný postup: Zablokovať všetky prístupy okrem niektorých špecifických. Nasledujúci kód povoľuje IP adresy len z lokálnej siete
order deny,allow
deny from all
allow from 192.168.0
Slovo na záver
Vymenovať všetky vymoženosti konfigurácie cez .htaccess by bolo nadlho, tak som spomenul len tie nejzaujímavejšie z nich. Trik ako zaheslovanie adresára je nezbytný pre bezpečnosť stránky, prípadne technika coolURL je vhodná pre uživateľskú príjemnosť ale aj na optimalizáciu pre vyhľadávače(angl. SEO). Akékoľvek otázky či pochyby umiestňujte do komentárov.
Zdroje: jakpsatweb.cz [2], programujte.com, corz.org
Kategórie: webdizajn,
Komentáre:
GREPY 8.3.2009 - 15:22:45
Zatiaľ som to využíval iba do práce ale myslím, že to budem využívať v rôznych projektoch...
Zenit 8.3.2009 - 11:51:15
Hej regex je docela fajn vec, aspoň mám námet na ďalší článok.
Robíš dačo s regexom? Do práce, alebo nejaký vlastný projekt?
GREPY 6.3.2009 - 20:52:50
RÉGEX - RÉGEX - RÉGEX !!! (skandovanie)
Pred pár dnami som s tým pracoval a teda poviem, dalo mi to dosť námahy, kým som sa z toho vysomáril a naučil som sa to.
Vytvoril som si skript, ktorý dokáže zo zadaného HTML banneru vytiahnuť adresu odkazu a nahradiť ju požadovanou. Vcelku makačka, ale teraz by mi to tak dlho už netrvalo.





