.htaccess a .htpasswd
Jednoduchy recept na .htaccess
Takze najprv sa uistime ci mame v konfiguracnom subore pre apache povolenu instrukciu AllowOverride.
Co dokaze .htaccess?
- Nastavit vlastne chybove stranky
- Zabanovanie IP adres
- Obmedzenie pristupov do niektorych casti stranky
- Prepis dynamickych adres v php na staticke html
- A este dost dalsich veci ktore neviem ;-)
Chybove strankydo .htaccess pridame:
ErrorDocument 404 /chyba.html
znamena to ze pre serverovu chybu 404 sa nam nacita nas vlastna stranka chyba.html
zoznam errorov:
400 Bad Request
401 Authorization Required
403 Forbidden
404 Not Found
500 Internal Server Error
Zabanovanie IP adres
do .htaccess pridame:
deny from ip adresa >> napr. >> deny from 192.151.464.188 tymto prikladom sme zablokovali pristup na stranku z ip adresy 192.151.464.188 mozme ale tiez zabanovat naraz vacsi pocet adres >> napr. >> deny from 192.151 tymto prikladom zablokujeme pristup pre vsetky ip adresy ktore zacinaju 192.151 opakom deny je prikaz allow
napr.>> allow from 192.151.45.97
znamena to ze ak sme predtym zablokovali adresy ktore zacinaju na 198.151 tak pre ip adresu 192.151.45.97 bude udelena vynimka
este tu je jedna moznot a to je "deny from all" ktora zablokuje vsetky ip adresy
Vypis adresara na obrazovku
Najpr si zistime ci je subore httpd.conf nastavena direktiva Options Indexes
pokial tam je tak ak sa v adresari nenachadza subor index.html (index.php ....) nastane vypis adresara na obrazoku. Toto mozme obmedzit ked do .htaccess pridame "Options -Indexes" ak naopak chceme aby nastal vypis a v httpd.conf sa hodnota
options indexes nenachadza tak do htaccess pridame "Options +Indexes"
Prepis dynamickych adries
Najprv zistime ci na servere Apache je nainstalovany modul mod_rewrite
ak tam je tak mozme zacat s prepisovanim
# podstrcenie stranky
RewriteEngine on
RewriteRule zadana-stranka\.html podstrcena-stranka.html
TAKZE: chcem aby klient po zadani stranky nic.html dostal stranku nieco.html >>
ked do browseru napise
www.nejakadomena.com/nic.html dostane pritom stranku nieco.html
RewriteEngine on
RewriteRule nic\.html nieco.html
Najvacsou vyhodou je moznost vyuzit regulerne vyrazy:
TAKZE chcem aby vsetky stranky, ktore vyzeraju takto index.php?action=nieco vyzerali ako nieco.html do .htaccess pridame:
RewriteEngine on
RewriteRule ^(.*)\.html index.php?action=$1
vysvetlenie: znak ^(.*) sa nahradi za $1
myslim ze na
www.root.cz sa dozviete viac o regulernych vyrazoch
Zaheslovanie adresara pomocou .htpasswd
Tejto problematike je venovana vlastna stranka .htpasswd.html
Na zeheslovanie adresara budeme potebovat 2 subory: .htaccess a subor, kde budeme mat ulozene svoje hesla .htpasswd.
Vytvorenie suboru .htaccess
Tento subor musime umiestnit do adresara, ktory chceme zaheslovat.
Nase .htaccess bude obsahovat:
AuthUserFile /absolutna/cesta/k/vasmu/suboru/.htpasswd
AuthGroupFile /dev/null
AuthName "Sukromne data"
AuthType Basic
require valid-user
AuthUserFile >> urcuje absolutnu cestu k suboru .htpasswd. Ako zistit absoulutnu adresu popisem neskor
AuthGroupFile >> obsahuje cestu k suboru, ktory obsahuje skupiny uzivatelov ak skupiny nemame dopnime /dev/null
AuthName >> nazov zabezpecenej oblasti mozme tam napisat cokolvek do " ".
AuthType >> typ autorizacie, tu pouzivame Basic
require >> napiseme valid-user >> aby pristup k dolezitym suborom bol obmedzeny len pre uzivatelov definovanych v subore .htpasswd.
Vytvorenie suboru s heslami .htpasswd
Nas subor s heslami vyzera takto:
uzivatel1:zasifrovane heslo1
uzivatel2:zasifrovane heslo2
atd.
Hesla v subore .htpasswd su kodovane pomocou php funkcie crypt. Na zakodovanie hesla pouzijeme jednoduchy php script crypt.php pomocou ktoreho sa name tiez podari zistit absolutnu cestu potrebnu pre .htpasswd:
Kód:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title>PHP script pre zasifrovanie hesla do .htpasswd</title>
</head>
<body>
<form action="<?php echo $PHP_SELF ?>" method="post">
Heslo, ktore chcem zasifrovat:
<br /><input type=text name=heslo />
<input type="submit" name="submit" value=">>zakoduj!<<" />
</form>
<?php
if (isset ($_POST['submit'])) {
echo '<span style="background-color:lightgreen;">'."\n";
echo ' Heslo - '.$_POST['heslo']."\n";
echo '</span>: '."\n";
echo '<span style="background-color:lightblue;">'."\n";
echo "\t".crypt ($_POST['heslo'])."\n";
echo '</span>'."\n";
}
echo '<br /><br />$_SERVER[\'DOCUMENT_ROOT\'] : <strong>'."\n";
echo $_SERVER['DOCUMENT_ROOT'].'</strong>'."\n";
?>
</body>
</html>
pomocou $_SERVER['DOCUMENT_ROOT'] mozeme ziskat absolutnu adresu.