Htaccess – co to jest?

Htaccess (a właściwie „.htaccess”) to plik zawierający lokalną konfigurację serwera Apache, czyli oprogramowania zajmującego się przyjęciem żądania od klienta (np. Twojej przeglądarki internetowej) i przygotowania odpowiedzi, np. wygenerowanie kodu strony dla Twojej przeglądarki.

Możliwości pliku .htaccess

Przeznaczeniem pliku .htaccess jest wprowadzanie dodatkowych ustawień które zmieniają zachowanie serwera lub nadpisują obecne ustawienia zapisane w głównym pliku konfiguracyjnym gdzieś na serwerze – zwykle httpd.conf lub twojadomena.pl.conf . Ponieważ dostęp do głównego pliku konfiguracyjnego jest utrudniony, .htaccess pozwala dodać interesujące nas ustawienia z poziomu konta FTP, dostępnego w standardzie na każdym hostingu.

Ustawienia jakie możemy wprowadzać mogą być mniej lub bardziej zaawansowane, ale najczęściej używanymi są te modyfikujące sposób, w jaki przetwarzane są żądania Użytkowników:

  • Przekierowania
    • Ze starego adresu na nowy (301)
    • Wczytanie informacji o trwałym usunięciu adresu URL (410)
  • Wskazywanie na pliki wczytywane podczas wystąpienia błędów
    • Brak takiego adresu (404)
    • Brak uprawnień do przeglądania (403)
    • Błąd serwera (500)
  • Ustawianie nagłówków odpowiedzi HTTP, np. X-Robots-Tag
  • Zarządzanie kompresją plików wysyłanych przez serwer
  • Kontrola dostępu do zasobów np. tylko dla danego numeru IP lub danej przeglądarki / Googlebota.

Drugą ważną możliwością jest to, że plik ten działa w katalogu w którym się znajduje oraz jego podkatalogach, dopóki podkatalog nie jest katalogiem głównym innego serwera (wtedy dziedziczenie nie zadziała). W podkatalogu możemy umieścić kolejny plik .htaccess z własnymi ustawieniami.

Wydajność pliku .htaccess

Duży plus, jeśli zadałeś sobie pytanie „A co z wydajnością? Właśnie dodałem setki reguł 301…”. Podejścia są dwa: pesymistyczne i optymistyczne 🙂

W podejściu pesymistycznym wiemy, że serwer szuka plików .htaccess w obecnym katalogu (skąd pobieramy np. jakiś plik) oraz we wszystkich katalogach wyżej od niego. Nawet jeśli te pliki nie istnieją, serwer musi to sprawdzić. Następnie przetwarza plik reguła po regule, a jeśli znajdzie więcej plików, musi je najpierw scalić (ponieważ reguły z niższego katalogu nadpisują te wyższe). To się dzieje przy każdym zapytaniu. Dużo szukania i przetwarzania, prawda? Dla sklepu w którym dodaliśmy setki lub tysiące reguł RewriteRule to wydaje się szaleństwem! Trzeba porównać każdą regułę, przetworzyć każde wyrażenie regularne! Ah, gdybyśmy mieli dostęp do głównego pliku konfiguracyjnego, nasze reguły zostałyby wczytane przez serwer tylko raz…

W podejściu optymistycznym jesteśmy jednak świadomi kilku faktów. Po pierwsze, nasz serwer jest wyposażony w o wiele szybszy dysk SSD niż jeszcze jakiś czas temu. Dysponujemy większą pamięcią i większą mocą obliczeniową. Oprogramowanie serwera jest szybsze – lepiej zoptymalizowane w samym kodzie lub przez rozwój samych języków programowania. To oznacza że szukanie i przetwarzanie pliku .htaccess nie stanowi dla naszego serwera najmniejszego problemu. Po drugie, reguły które umieściliśmy w pliku .htaccess są dość proste. Najczęściej porównujemy URL, czyli ciąg znaków. Reguły zawierające skomplikowane wyrażenia regularne stanowią zdecydowaną mniejszość. Po trzecie, używając flagi L („Last”), możemy przerwać analizowanie dalszych reguł, co skróci przetwarzanie. Po czwarte, co najważniejsze – reguły przekierowań 301 umieszczamy w końcu tylko na jakiś czas.

Patrząc realnie na problem wydajności związany z używaniem pliku .htaccess, to problem ten może dotyczyć stron o bardzo dużym ruchu. Dla takich stron zalecane jest umieszczanie reguł bezpośrednio w głównym pliku konfiguracyjnym w sekcji <Directory> przez osoby zarządzające serwerem.