Kurs .htaccess

Marek Szydełko
05.09.2015

I kolejna notka z serii odświeżamy archiwum, tym razem o jakże ciekawym pliku .htaccess.

Co to jest?
Plik .htaccess pozwala na swoją konfiguracje swojego katalogu (public_html) i jego podkatalogów.
Kilka własnożci:
1. Jeżli wstawimy do jakiegoż podkatalogu inny plik .htaccess następuje zmiana ustawień w tym katalogu i w jego podkatalogach oraz podkatalogach tego podkatalogu i tak bez końca.
2. Pamiętaj, że każdą komendę konfiguracji trzeba zdefiniować po enterze (chr(13));

Ogólnie mówiąc dzięki plikom .htaccess możemy ustawić parametry dla kilku tysięcy stron jednoczeżnie zamiast ustawiać je pojedynczo.

Własne strony błędów!
wklejamy do .htaccess
ErrorDocument 400 /400.php
ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
ErrorDocument 503 /503.php


gdzie ErrorDocument nr błedu. Np. ErrorDocument 400 - błąd 400. Natomiast 400.php strona, która będzie wyżwietlana.

Przykładowa strona błędu (404 - nie ma takiego pliku):

// logi
Function logs($msg){
global $HTTP_USER_AGENT, $_SERVER;
$url = sprintf(”%s%s%s”,”http://”,$_SERVER['HTTP_HOST'],$_SERVER['REQUE ST_URI']);
$plik=’http’;
if($_SERVER['HTTPS']==’on’){$plik.=’s’;}
$plik.=’://’.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
if($_SERVER['QUERY_STRING']>’ ‘){$plik.=’?’.$_SERVER['QUERY_STRING'];}
if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$mz_user['proxy']=$_SERVER["HTTP_CLIENT_IP"];
}else{
$mz_user['proxy']=$_SERVER["REMOTE_ADDR"];}
$mz_user['ip']=$_SERVER["HTTP_X_FORWARDED_FOR"];
}else{
if ($_SERVER["HTTP_CLIENT_IP"]) {
$mz_user['ip']=$_SERVER["HTTP_CLIENT_IP"];
}else{
$mz_user['ip']=$_SERVER["REMOTE_ADDR"];}}
$h=@fopen(’logs.txt’,'a’); // pamietaj aby ustawic chmod na 622
@fwrite($h,date(’H:i:s d-m-Y’).’ ip: ‘.$mz_user['ip'].’ proxy: ‘.$mz_user['proxy'].’ plik: ‘.$plik.’ url: ‘.$url.’
‘.$msg.’

‘);
@fclose($h);
return $msg;}

// log
logs(’404 - Plik nie istnieje’);
?>

Blokady

Folder
deny from all
Ten kod trzeba wstawić do nowego pliku .htaccess w danym katalogu, który chcemy blokować.

IP
deny from 000.000.000.000
|Zamiast 000.000.000.000 adres ip. Ten kod trzeba wstawić do nowego pliku .htaccess w danym katalogu, który chcemy blokować.
deny from all
allow from 000.000.000.000

Dostęp tylko z danego ip. (IP zamiast 0).
Ten kod trzeba wstawić do nowego pliku .htaccess w danym katalogu, który chcemy blokować.

Przekierowywanie
Redirect /sciezka http://www.innastrona.pl/stara

Gdzie /sciezka plik do którego użytkownik chce się dostać, a http://www.innastrona.pl/stara / to, gdzie użytkownik ma być przekierowany.

Użytkownicy
AuthName “Section Name”
AuthType Basic
AuthUserFile /scizka/do/.htpasswd
Require valid-user

Ustawienie hasła dostępu dla danego folderu. Section Name zastępujemy naszym komunikatem, a /scizka/do/.htpasswd sciezka do pliku .htpasswd, w ktorym przechowywane są hasła.
Hasła przechowuje się w formacie:
login:haslo . Do tego trzeba użyć funkcji crypt() z PHP.

Wykorzystanie, przykład:
echo crypt(’haslo’,CRYPT_STD_DES);
?>

Dostęp tylko dla osób z loginami marek i jacek:
AuthName “Section Name”
Access allow all users marek jacek

Dostęp tylko dla danej grupy
AuthName “Section Name”
Access allow all groups lolki

Dla grupy lolki.

Dostęp tylko dla osób z tym samym ip:
AuthName “Section Name”
Access allow 192.45.111.222

Dostęp tylko dla osób, które ip rozpoczyna się od 195.205
AuthName “Section Name”
Access allow 195.205

Pliki
Dołączanie plików, do plików w danym katalogu.
HeaderName /HEADER.HTML
ReadmeName /README.HTML

Dzięki tym linijkom, gdy nie będzie w danym folderze pliku index.php Serwer wyżwietli katalogi znajdujące siew nim tylko, że dołączone będą pliki HEADER.HTML oraz README.HTML. Czemu takie nazwy? Te pliki są ukrywane przy listowaniu, Czemu / przed nimi, gdy będzie bez / to, dołączać będzie te pliki tylko dla tego katalogu w którym jest plik .htaccess
To jest szczególnie przydatne gdy chcemy zrobić stronę opartą o drzewo folderów oraz chcemy wiedzieć ile na niej przebywa osób (można żmiało do pliku README lub HEADER wsadzić jakież statystyki w PHP czy inne)
Uwaga nie radze zmieniać rozmiarów i typów czcionek bo całe listowanie może się rozwalić .

Dana aplikacja dla danego typu plików
AddType application/x-httpd-php .jpg
Będzie wykonywany kod php dla plików .jpg .

Wyłączenie SSI
AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes

Zmiana domyżlnego pliku wyżwietlanego (jak sie Wam index.php/html znudziło)
DirectoryIndex plik.html abc.def
Gdzie plik.html - nazwa pliku domyżlnego.

Zmiana wykonywalnego programu przeglądarki dla danego typu plików w danym katalogu
:Location /*.muzyka
SetMime audio/mpeg

Blokowanie dostępu do przeglądania pliku .htaccess

order allow,deny
deny from all


Blokowanie hotlinkowania
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?twoja-strona.pl/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]

Ograniczenie wyżwietlanych plików w katalogu
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?twoja-strona.pl/.*$ [NC]
RewriteRule .(gif|jpg)$ http://www.twoja-strona.pl/hotlink.gif [R,L]

Podsumowanie

To już jest koniec, mam nadzieję , że się przyda.

Podałem tu przykłady danych zastosowań, ponieważ ogólnych wzorów, które by zawsze działały - nie ma.

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie