Plik .htaccess

1. 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 tysiecy stron jednocześnie zmiast ustawiać je pojedyńczo.



2. Przykłady


Kod:

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:

Kod:

<?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="nofollow" href="https://justpaste.it/redirect/plik-htaccess/http://www.sulucilus.fol.pl/gfx/styl.css" type="text/css"/>
        <link rel="nofollow" href="https://justpaste.it/redirect/plik-htaccess/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="https://justpaste.it/redirect/plik-htaccess/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>




Kod:

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)


Kod:

deny from 000.000.000.000


Blokowanie danego zakresu ip


Kod:

deny from all
allow from 000.000.000.000


Dostęp tylko z danego zakresu ip


Kod:

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


przekierowanie przy próbie dostępu do danego pliku(oczywiscie z poziomu przegladarki), jesli ktos bedzie chcial odczytac np.
http://www.strona.pl/sciezka/plik.php to automatycznie przekieruje go do http://www.innastrona.pl/stara/plik.php


Kod:

AuthName \"Section Name\"
AuthType Basic
AuthUserFile /scizka/do/.htpasswd
Require valid-user[/code]
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:
<br><b><small>Kod:</small></b><p class="code"><code><font color="#000000">
login:haslo


Jeśli chcesz możesz dodać kilka userów (poprostu 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.

Kod:

<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>




Kod:

AuthName "Section Name" Access allow all users marek jacek


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


Kod:

AuthName "Section Name" Access allow all groups lolki


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


Kod:

AuthName "Section Name" Access allow 192.45.111.222


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


Kod:

AuthName "Section Name" Access allow 195.205


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


Kod:

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 smiał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ć ;/


Kod:

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


Kod:

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


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


Kod:

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.


Kod:

: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)


Kod:

<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ć.


Kod:

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.

Kod:

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




Kod:

IndexIgnore *.gif *.jpg


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



3. Linki




4. Autor

Autorem tekstu jest Sulucilus. Jeśli chcesz możesz zamieścić ten tekst na swojej stronie ale musisz podać kto jest jego faktycznym autorem oraz kontakt z nim. W tym przypadku:

Autor: Sulucilus
WWW: http://suli.goneo.net

 

Autor: Sulucilus