webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> porady >> pozostałe

Plik .htaccess

autor: Sulucilus, ostatnia modyfikacja: 2007-02-21

szukaj: htaccess htaccess pliki htaccess pliki htaccess

Do czego służą pliki .htaccess ?

Plik .htaccess pozwala na pewne zmiany w konfiguracji serwera. Zmiany te są widoczne tylko w podkatalogach i katalogu, w którym ten plik się znajduje.

Jeśli wstawimy do jakiegoś podkatalogu inny plik .htaccess następuje zmiana parametrów w tym katalogu i znów w podkatalogach tego podkatalogu :)

Pamiętaj, że każdą komendę konfiguracji definujemu 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 pojedyńczo.

Przykłady

ErrorDocument 400 /400.php
ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
ErrorDocument 503 /503.php

Dzieki tym linijkom mozemy określić własne strony z informacją o danym błędzie. Oto mój przykładowy plik strony informującej o błędzie:

<?php

// logi
Function logs($msg)
{
    global $HTTP_USER_AGENT, $_SERVER;
    $url = sprintf("%s%s%s","http://",$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_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');
?>
<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2"/>
        <link rel="stylesheet" href="http://www.sulucilus.fol.pl/gfx/styl.css" type="text/css"/>
        <link rel="shortcut icon" href="http://www.sulucilus.fol.pl/gfx/ikona.ico">
        <title>Sulucilus home page - Bł&#177;d(ERROR) 404</title>
    </head>
    <body background="http://www.sulucilus.fol.pl/gfx/tlo.gif" leftmargin="0" topmargin="0">
        <center><img src="http://www.sulucilus.fol.pl/gfx/404.jpg" width="561" height="439" border="0" alt="PODANA STRONA NIE ISTNIEJE - PAGE NOT EXIST"/><br/>
        <p><a href="http://www.sulucilus.fol.pl"><img src="http://www.sulucilus.fol.pl/gfx/404_1.jpg" width="298" height="37" border="0" alt="Kliknij aby dostać się na stronę główn&#177; - Go to main page" title="Kliknij aby dostać się na stronę główn&#177; - Go to main page"/></a></p></center>
        <script language="JavaScript" type="text/javascript">
            document.write("<img src=\\"http://stat.4u.pl/cgi-bin/s.cgi?i=sulucilus&r="+top.document.referrer+"\\" width=1 height=1>")
        </script>
        <noscript>
            <img src="http://stat.4u.pl/cgi-bin/s.cgi?i=sulucilus&r=ns" width="1">
        </noscript>
    </body>
</html>
deny from all

blokowanie dostępu z zew. nikt nie wylistuje tego folderu i nie podejży w nim plików(oprócz użytkownika oraz twoich skryptów)

deny from 000.000.000.000

Blokowanie danego zakresu ip

 deny from all
allow from 000.000.000.000

Dostęp tylko z danego zakresu ip

 Redirect /scizka http://www.innastrona.pl/stara

przekierowanie przy próbie dostępu do danego pliku(oczywiście z poziomu przeglądarki), jeśli ktoś będzie chciał odczytać np. http://www.strona.pl/sciezka/plik.php to automatycznie przekieruje go do http://www.innastrona.pl/stara/plik.php

 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 którym przechowywane są hasła.
Hasła przechowuje się w formacie:
<br><b><small>Kod:</small></b><p class="code"><code><font color="#000000">
login:haslo

Jeśli chcesz możesz dodać kilka userów (po prostu dodajesz kolejne linijki z "login:haslo". Pamiętaj, że hasło musi być zakodowane. Do tego celu użyj funkcji crypt z php http://pl.php.net/manual/pl/function.crypt.php.

 <font color="#0000BB"><?php </font><font color="#007700">echo </font><font color="#0000BB">crypt</font><font color="#007700">(</font><font color="#DD0000">'haslo'</font><font color="#007700">,</font><font color="#0000BB">CRYPT_STD_DES</font><font color="#007700">); </font><font color="#0000BB">?></font>
AuthName "Section Name" Access allow all users marek jacek

Dostęp tylko dla użytkowników o loginach marek i jacek

AuthName "Section Name" Access allow all groups lolki

Dostęp tylko dla użytkowników należących do grupy lolki

AuthName "Section Name" Access allow 192.45.111.222

Dostęp tylko dla użytkowników mających ip: 192.45.111.222

 AuthName "Section Name" Access allow 195.205

Dostęp dla dowolnego hosta, którego ip zaczyna się od 194.45

 HeaderName /HEADER.HTML ReadmeName /README.HTML

Dzięki tym linijkom gdy nie będzie w danym folderze pliku index apache wylistuje katalogi z tym, że zaincluduje pliczki HEADER.HTML oraz README.HTML.

Czemu takie nazwy, te pliczki są ukrywane przy listowaniu, Czemu / przed nimi, gdy będzie bez / to bedzie includowal te pliczki tylko dla tego katalogu w którym jest pliczek .htaccess

To jest szczególnie przydatne gdy chcemy zrobić stronę opartą o listowanie folderów oraz chcemy wiedziec ile na niej przebywa osób (można śmiało do pliku README lub HEADER wsadzić jakieś statystyki)

Uwaga nie radze zmieniać rozmiarów i typów czcionek bo całe listowanie może się rozwalić ;/

 AddType application/x-httpd-php .jpg

Określa typ dla danego rozszerzenia, w przykładzie wyżej, ustawione jest, iż w plikach .jpg zostanie wykonywany kod php

AddType text/html .shtml AddHandler server-parsed .shtml Options Indexes FollowSymLinks Includes

Czasem SSI jest domyślnie wyłączone, ten wpis to zmieni.

 DirectoryIndex plik.html abc.def

Chciałbyś zmienić nazwę domyślnego pliku(np. index.php, index.html), który jest wyświetlany ? Nic trudnego wystarczy ten wpis. W nim decydujemy jaki plik ma być załadowany gdy nie jest podany konkretny plik. Pamiętaj, że kolejność ma znaczenie. Ponieważ jak nie będzie istniał jeden plik to serwer sprawdzi czy kolejny na liście istnieje, jeśli tak to go zaladuje.

 :Location /*.muzyka SetMime audio/mpeg

Ustawienie wartości mime (jest to rozszerzenie, które pobiera przeglądarka, następnie decyduje jaki program je obsługuje i uruchamia go) dla danego rozszerzenia plików w danym katalogu (można określić dla konkretnego pliku)

<Files .htaccess> order allow,deny deny from all </Files>

Parametry dla danego pliku (jeśli wstawimy * to plików). W tym przypadku ustawiamy brak dostępu dla osób, które chciałyby podejrzeć nasze pliczki .htaccess. Jest to bardzo ważne ponieważ jak bronimy dostępu do jakiegoś pliku lub katalogu hasła mogą być przechowywane w takich pliczkach, a co za tym idzie podglądane przez przeglądarke (przy odpowiednich ustawieniach serwera), dlatego warto to zmienić.

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

Czasem zdarza się, że statystyki na serwerze oraz na zew serwerze zupełnie się różnią. Warto by sprawdzić czy przypadkiem do naszych obrazków nie ma hotlinkowania, które sprawia, że trafik jest większy a statystyki kłamią. Te pare linijek wyżej rozwiążą nasz problem. Można też zamiast bronić użycia hotlinkowania poprostu przenieść użytkownika (przeglądarke) do innego obrazka.

 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]

Czasem byśmy chcieli aby apache nie wylistował wszystkich plików. Ta linia odznaczy nam te, których nie chcemy. Przykład jest na plikach o rozszerzeniach jpg i gif

 IndexIgnore *.gif *.jpg

Sulucilus, http://suli.goneo.net

Osoby czytające tę publikację przeglądały również:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org