Turinio valdymas su .htaccess ir .htpasswd
Parašė N3PST3R 2006 rugsėjo 27 14:09:55
.htaccess ir .htpasswd kas tai?


Šios dvi bylos (tai būtent ir yra bylos) naudojamos Apache HTTP serverā€™io. T.y. jas naudojant galima Apache PĮ nurodyti specifinius parametrus, kuriais remiantis ji turi interpretuoti įvairių publikuojamų katalogų nustatymus.

Ką galima apibrėžti (nustatyti), naudojant šias bylas:

Atliekant struktūrinius pakeitimus (perkeliame, ištriname bylas ar katalogus) .htaccess byloje galime nurodyti kur nukreipti svetainės lankytojus, ieškančius senos informacijos,
Galime nustatyti, kad dinaminėmis būtų ne tik .php išplėtimą turinčios bylos, bet ir statinės (pvz.: .htm ar .html),
Leisti ar drausti katalogo turinio peržiūrą,
Apsaugoti katalogus slaptažodžiu (galime kurti vartotojus bei jų grupes),
Apsaugoti tinklapius nuo paieškos sistemų robotų, blokuoti kai kuriuos spam-robotus.

Pirmiausia apie pačias bylas: bylų pavadinimai prasideda taškais, kadangi daugelis UNIX OS tokiu būdu bylas pažymi nematomomis (hidden). Todėl, norint, kad jos būtų matomos atitinkamai reikės nustatysi savo terminalo arba ftp kliento programą (show hidden).

Bylų .htaccess redaguoti galime paprasčiausiu tekstiniu redaktoriumi (pvz.: Notepad). Šią bylą, minėtu redaktoriumi galime ir patys susikurti, žinoma, saugosime pavadinimu ā€œ.htaccessā€¯ (be kabučių). Įkeliant bylą į pagrindinį kompiuterį (server) per FTP, reikia nustatyti ASCII režimą (jei jis neparenkamas automatiškai).

.htaccess bylos veikimo sritis yra hierarchinė. T.y. jei ją patalpinome tarkime /home/tomas/public_html/ku/.haccess, ji veiks ir kituose (žemesnio lygio) kataloguose. Na, žinoma, jei žemesnio lygio kataloguose nėra kitos .htaccess bylos.

Nukreipimai

Tarkime reorganizuojame svetainės struktūrą ir perkeliame bylas/katalogus iš vienos vietos į kitą (pvz.: http://www.ku.lt/libr/ katalogą perkeliame į http://www.ku.lt/administracija/libr/. Norėdami, kad vartotojai pasiektų perkelto katalogo turinį turėtume .htaccess byloje įrašyti:

RewriteEngine on
RewriteRule ^libr/(.*)$ administracija/libr/$1
RewriteRule ^libr$ /libr/ [R]
Šis pakeitimas atlieka paprastą veiksmą ā€œlibr/ā€¯ kataloge kreipiantis į bylą (.*) - ji imama iš ā€œadministracija/libr/ā€¯ katalogo. Naudodami skliaustelius galime apibrėžti perduodamus parametrus. Šiuo atveju - tai bylos pavadinimas. Sudarinėdami tokias taisykles naudojame reguliarius išsireiškimus (REGEXP).

Statinis turinys tampa dinaminiu
Kartais tenka susidurti su atvejais, kai sukuriamas tinklapis saugomas, naudojant ā€œ.htmā€¯ arba ā€œ.htmlā€¯ išplėtimą, tačiau puslapių kode naudojamas Server-Side kodas (pvz.: PHP instrukcijos). Tam, kad nereikėtų keisti ā€œhttpd.confā€¯ bylos, kur nustatomas Apache serveris, vėlgi galime pasinaudoti .htaccess byla:

RewriteEngine on
RewriteRule ^(.*).html$ $1.php [T=application/x-httpd-php]
Panašiai elgtumėmės ir su kitomis skriptinėmis kalbomis (ASP, CGI, Perl ir kt.).

Bylų/katalogų apsaugojimas slaptažodžiais


Tai - vienas paprasčiausių būdų, kaip apsaugoti savo turinį nuo pašalinių akių. Šiuo atveju teks pasitelkti papildomą bylą - .htpasswd. Ji sukuriama komandinėje eilutėje įvykdžius:

htpasswd -c $HOME/public_html/ku/slapta/.htpasswd admin
Ʋinoma, kataloge ā€œslapta/ā€¯ teks sukurti .htaccess bylą, kuri atrodytų taip:

AuthUserFile $HOME/public_html/ku/slapta/.htpasswd
AuthGroupFile /dev/null
AuthName "Slaptas katalogas"
AuthType Basic

require user admin
Naudojant šį būdą galima apsaugoti ne tik katalogus, bet ir atskiras bylas.

Kaip apsisaugoti nuo el. pašto adresus renkančių robotų (spam-bots)?


.htaccess byloje nurodome kurias programas naudojantys vartotojai turėtų būti peradresuojami:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*Ants.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*attach.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Widow.*$ [OR]
[Ir taip toliau...]
RewriteRule /* http://www.vmi.lt [L,R]
Paskutine eilute nukreipiame tokius piktavalius vartotojus į mokesčių inspekcijos tinklapį (gali būti bet kuris tinklapis).

Kaip ieškoti bylos keliuose kataloguose (egzotika)?

Naudojant .htaccess bylą įmanoma sukurti taisykles, kuriomis remiantis galime priversti Apache serverį atlikti bylos paiešką, nurodydami katalogus, kuriuose ta paieška turi būti vykdoma. Pateikiu instrukcijų pavyzdį:

RewriteEngine on
RewriteCond /home/tomas/ku/libr/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /home/tomas/ku/libr/$1 [L]

RewriteCond /home/tomas/ku/libr2/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /home/tomas/ku/libr2/$1 [L]

RewriteRule ^(.+) - [PT]
Šis būdas galėtų būti naudingas atliekant svetainės pertvarkymus - vienu metu galima naudotis keliais katalogais.

Nustatyti klaidų (pvz nerasto puslapio) klaidos puslapius
ErrorDocument 403 /forbidden.html // uždrausta
ErrorDocument 404 /notfound.html // nerastas
ErrorDocument 500 /servererror.html // serverio klaida

Pakeisti pradinį puslapį
DirectoryIndex myhome.htm index.htm index.php
Blokuoti vartotojus, kad neįeitų į puslapį
<limit GET POST PUT>
order deny,allow
deny from 202.54.122.33 //IP'ai
deny from 8.70.44.53
deny from .spammers.com
allow from all
</limit>

Leisti tik LAN'o naudotojus
order deny,allow
deny from all
allow from 192.168.0.0/24

Nukreipti lankytojus į naują puslapį ar direktoriją
Redirect oldpage.html http://www.domainname.com/newpage.html
Redirect /olddir http://www.domainname.com/newdir/

Blokuoti" Karštas" Nuorodas/Srauto šokinėjimus
RewriteEngine on
RewriteCond %{-http-referer-} !^$
RewriteCond %{-http-referer-} !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]

Blokuotį tinklalapį nuo specifinių " referrerių"
RewriteEngine on
RewriteCond %{-http-referer-} site-to-block.com [NC]
RewriteCond %{-http-referer-} site-to-block-2.com [NC]
RewriteRule .* - [F]

Neleisti peržiūrėti .htaccess failo (ar bet kokio kito)
<files file-name>
order allow,deny
deny from all
</files>

Tausoti srautą
# Only if you use PHP
<ifmodule mod_php4.c>
php_value zlib.output_compression 16386
</ifmodule>

Išjunkti magic_quotes_gpc
# Only if you use PHP
<ifmodule mod_php4.c>
php_flag magic_quotes_gpc off
</ifmodule>

Išjunkti direktorijos peržiūrą
Options All -Indexes

Įjunkti direktorijos peržiūrą
Options +Indexes
## block a few types of files from showing
IndexIgnore *.wmv *.mp4 *.avi

Blokavimas IP adreso iš .htaccess.
Susikūriate ir įrašote:
deny from 000.000.000.000 (IP adresas vietoj 000.000 ir t.t.)

Norit,kad jūsų saitas nebūtų atakuojamas spammerių?
Tai galima padaryti,ir spammeriams bus daug sunkiau surasti jus.
Įrašome į .htaccess :
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 ^.*$ X.html [L]

Jei nenorite,kad žmones naudotų jūsų paveikslėlius savo puslapyje tam tiks šis .htaccess įrašome :
RewriteEngine on RewriteCond %{-http-referer-} !^$ RewriteCond %{-http-referer-} !^http://(www.)?adresas.lt/.*$ [NC] RewriteRule .(gif|jpg)$ - [F]
Kur paryškinau keisti į jūsų puslapio adresą
Beto galima priskirti šį dalyką,ne vien uždraustri naudoti jūsų paveiksliukus,bet ir failus.
Beje pamiršau paminėti,jog galima padaryti,kad į saitą įleistų tik kelis arba vieną IP.
allow from 000.000.000.000

Dinaminiai linkai (kažkas forume jau minėjo,bet čia kitoks mano variantas)
Pvz.
Paprastas linkas: http://adresas.lt/tutorials.php?cat=php&id=1
Dynaminis linkas: http://adresas.lt/tutorials/php/1//
Įrašom :
Options +FollowSymLinks
RewriteEngine on
RewriteRule tutorials/(.*)/(.*)/$ /tutorials.php?cat=$1&id=$2