Co to jest plik .htaccess ?

Plik .htaccess to plik konfiguracyjny serwera Apache. Nie należy mylić nazwy tego pliku z rozszerzeniem formatu pliku.  Jest to zwykły plik tekstowy o nazwie rozpoczynającej się znakiem kropki, co ma sugerować, że jest to  właśnie plik konfiguracyjny. Może być używany przez każdy serwer webowy korzystający z oprogramowania Apache.

Gdy plik .htaccess umieścimy w wybranym katalogu na serwerze Apache, zostanie załadowany przez serwer Apache, a zapisane w nim ustawienia będą miały zastosowanie do wszystkich plików i katalogów zawartych w tym katalogu.

Po co ten plik tworzyć i w jakim celu jest uruchamiany przez serwer? Używa się go do zmiany konfiguracji serwera Apache w celu włączenia / wyłączenia wybranych funkcji udostępnianych przez serwer Apache lub dodatkowych funkcji. Można więc skrótowo powiedzieć, że odpowiada on za zachowanie serwera. Najczęściej jest stosowany do zmiany przekierowań, gdy np. wystąpi błąd 404 i ochrony hasłem zawartości katalogu na serwerze webowym.

Plik .htaccess możemy utworzyć w dowolnym edytorze tekstowym. Jeśli ładujesz ten plik na serwer, ważne jest, aby odbyło się to w trybie transferu danych: ‚ASCII’ mode a nie ‚BINARY’ mode(należy wybrać odpowiednie ustawienie w programie FTP,  za pomocą którego dokonujemy załadowania pliku).

Jeśli plik po załadowaniu nie jest widoczny, należy wtedy w programie FTP włączyć opcję podglądu ukrytych plików.W programie WinSCP wystarczy w oknie z menu wybrać Opcje->Preferencje a w okienku Ustawienia , które się pojawi, kliknąć na Panele i w prawej części zaznaczyć checkbox Pokaż ukryte pliki i zatwierdzić przyciskiem OK :

Najczęściej pliki takie (konfiguracyjne) są ukryte, a jeśli jest włączona ich widoczność, są zaznaczone na szaro. Plik zaraz po załadowaniu na serwer działa, wpływając wpisanymi regułami na zawartość katalogu, w którym się znajduje.

W pliku tym każda właściwość jest wpisywana w oddzielnej linii. Zawartość pliku musi się kończyć pustą linią. W pliku tym możesz  stosować komentarz, każda linia komentarza zaczyna się on znakiem # , np.
# konfiguracja dostępu do katalogu głównego:

Spójrzmy poniżej, jakie reguły możemy wpisać, aby podziałać na zasoby naszej witryny.

Zmianę nazwy pliku z .htaccess na inną(np. .config-apache ) możemy wprowadzić za pomocą dyrektywy AccessFileName :

AccessFileName .config-apache

Ustawienie domyślnej strony dla naszej witryny internetowej możemy wprowadzić za pomocą dyrektywy DirectoryIndex, po której podajemy nazwę startowej strony:

DirectoryIndex index.php

lub kilka nazw stron, wtedy jeśli nie znajdzie pierwszej podanej będzie poszukiwana kolejna:

DirectoryIndex index.php index.html replacedsite.html

W tym przypadku jeśli nie znajdzie strony index.php będzie poszukiwał index.html , a jeśli i tego pliku nie znajdzie poszuka replacedside.html .

Przypisanie aplikacji do rozszerzenia pliku:

AddType text/css .css

Jeśli przeglądarka znajdzie plik z rozszerzeniem .css to powinna otworzyć go programem do odczytu plików typu tekstowego css.

AddType text/html .xhtml

Z powyższej reguły wynika, że gdy przeglądarka znajdzie plik z rozszerzeniem .xhtml będzie go odczytywać za pomocą domyślnej aplikacji do odczytu plików html.

Szybka zmiana domyślnego kodowania dokumentów na UTF-8:

AddDefaultCharset UTF-8

Natomiast dyrektywa:

Options +Indexes
IndexIgnore *.gif, *.png

zezwala na przeglądanie zwartości katalogów witryny z wyjątkiem plików  z rozszerzeniem: .gif i .png. Zastosowanie Options -Indexes spowoduje zablokowanie przeglądania zawartości katalogów. Po IndexIgnore zawsze podajemy wyjątki do zezwolenia na przeglądanie plików lub zablokowania ich.

Jednym z najbardziej popularnych zastosowań .htaccess jest ładowanie własnej strony błędu i wymuszenie jej wyświetlenia zamiast nieprzyjaznego dla użytkownika komunikatu np. „404 File Not Found”, gdy okaże się że na serwerze nie ma wybranego zasobu, błędnie jest wpisany adres URL, zasób został usunięty lub serwer nie działa.

Przykład:
ErrorDocument 404 /errors/404.html

Powyższa reguła wpisana w linii pliku .htaccess informuje, że jeśli zostanie wywołany na serwerze błąd( ErrorDocument ) o kodzie 404 , wtedy zostanie załadowana użytkownikowi strona błędu o nazwie 404.html zawarta w katalogu errors w bieżącej domenie. Oczywiście możemy przypisać także strony błędów dla innych kodów serwera.

I kolejna reguła:

Przykład:
Redirect /old/ /new/index.php

Redirect powoduje przekierowanie użytkownika ze strony lub katalogu podanych jako pierwsza ścieżka dostępu do strony podanej jako druga ścieżka dostępu. Z powyższego przykładu wynika, że jeśli użytkownik będzie chciał uruchomić dokument z katalogu old zostanie przekierowany do dokumentu index.php zawartego w katalogu new .

Za pomocą .htaccess możemy także łatwo ochronić hasłem dowolny katalog wraz z jego zawartością. Próba dostania się do takiego zasobu spowoduje wyświetlenie przez przeglądarkę okienka typu pop-up z prośbą o podanie loginu i hasła. Hasło jest szyfrowane. Wpis w .htaccess mógłby wyglądać podobnie jak poniższy:

Przykład:
AuthName „Strefa administratora”
AuthUserFile /conf/.htpasswd
AuthType Basic
Require valid-user

Pierwszy parametr AuthName przechowuje nazwę zabezpieczonego katalogu(nazwa jest podawana w  w cudzysłowie). Kolejny wiersz wskazuje na ścieżkę dostępu do pliku konfiguracyjnego Apache przechowującego hasła dostępu do różnych miejsc na serwerze. Kolejny parametr przechowuje typ uwierzytelniania, najczęściej jest to opcja Basic . Ostatnia linia to parametr Require , który wskazuje, że wymagana jest walidacja wpisanych przez użytkownika danych dostępowych.

Jeśli chcemy zabezpieczyć nie katalog, w którym umieszczamy plik .htaccess , ale tylko konkretny plik musimy nieco rozbudować zawartość  wpisu w .htaccess :

AuthName „Strefa administratora”
AuthUserFile /conf/.htpasswd
AuthType Basic
<Files nazwa_pliku.php >
Require valid-user
</Files>

Plik z hasłami ( .htpasswd ) może znajdować się w dowolnym miejscu na serwerze, ale niektóre serwery wymagają jego umieszczenia w tym samym katalogu co plik .htaccess . Zauważ, że plik ten jest plikiem konfiguracyjnym serwera Apache, rozpoczyna się znakiem kropki. Tak jak plik .htaccess jest plikiem tekstowym, w którym możemy wpisywać w kolejnych liniach loginy i zaszyfrowane hasła użytkowników.

Przykład:
edzio : agQMjSkZmO0E2

Powyższa linia to fragment pliku .htpasswd . Jak widać podajemy nazwę użytkownika(tu edzio), a po niej dwukropek i zaszyfrowane hasło(przed zaszyfrowaniem był to łańcuch: ZnanyEdzio123). W kolejnych liniach możemy umieścić kolejnych użytkowników z ich hasłami. Do zaszyfrowania hasła, które chcemy wkleić do tego pliku są specjalne programy. Darmowy program online znajdziecie tu: Htpasswd Generator lub web2generators . Więcej informacji na temat .htpasswd znajdziecie na stronie apache.org .

Plik .htaccess umożliwia także blokowanie lub udostępnianie zasobów wybranym użytkownikom lub dostęp tylko do wybranych części witryny.

Przykład:
order allow,deny
allow from 120.10.1.20
deny from all

Pierwsza linia wskazuje na kolejność zezwolenia i blokowania. Po słowie order wpisanie najpierw allow , a potem deny informuje, że najpierw uwzględnione będą reguły zezwalające, a potem dopiero blokujące. W zależności od naszych potrzeb możemy tą kolejność zmienić. Druga linia wskazuje na adres IP, któremu zezwalamy na dostęp do naszych zasobów(przypominam -> katalogu, w którym znajduje się nasz plik z regułami, to nie musi być główny katalog na serwerze). W tym przypadku po allow from podajemy adres 120.10.1.20 , który będzie miał dostęp do zasobów. W ostatniej linii po deny from podajemy adresy IP do przyblokowania, all oznacza że blokujemy wszystkich. Mimo, że blokujemy wszystkich to po order podaliśmy, że pierwszeństwo ma reguła allow , dlatego też najpierw zezwalamy dostęp do zasobów, tu użytkownikowi o IP 120.10.1.20 . I dopiero teraz dla pozostałych blokujemy adresy, all oznacza, że dla wszystkich pozostałych.  Dla zezwolenia lub zablokowania grupy IP możemy użyć adresu skrótowego np. 120.10.1. który kończy się kropką bez podanej liczby i wtedy będą to wszystkie adresy IP rozpoczynające się tymi trzema liczbami np.: 120.10.1.15, 120.10.1.200 itp. Zamiast IP można użyć także domen i subdomen.

Po więcej odsyłam do dokumentacji serwera Apache .