Przydatne możliwości .htaccess

Dzięki plikowi .htaccess możemy skorzystać z wielu dodatkowych możliwości serwera Apache. Zapisane w nim reguły modyfikują globalną konfigurację, oraz wprowadzają własne ustawienia. W niniejszym artykule przedstawię kilka przydatnych dyrektyw, które pomogą w przekierowaniu ruchu, blokadzie hotlinkowania obrazków, dostępu do katalogu, umożliwią poinformowanie użytkowników o przerwie technicznej itp.

Przerwa techniczna

W przypadku dokonywania modyfikacji w serwisie www nie chcemy, aby korzystali z niego w tym momencie użytkownicy. Nie powinni oni zauważyć ewentualnych błędów lub efektów naszych prac przed ich zakończeniem. W tym celu najprościej przekierować wszystkie osoby oprócz nas na stronę informującą o przerwie technicznej. Możemy to wykonać rozpoznając adres IP przy pomocy poniższych reguł:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^111\.222\.333\.444
RewriteCond %{REQUEST_URI} !maintenance.html$ [NC]
RewriteRule .* /katalog/maintenance.html [R=302,L]
</IfModule>

W skrócie: jeśli adres IP jest inny niż 111.222.333.444, a bieżący dokument to nie maintenance.html, nastąpi przekierowanie użytkownika na stronę informującą o przerwie technicznej. Brak drugiej reguły doprowadzi do błędu serwera z powodu zapętlenia (ciągła próba przekierowania).

Przekierowanie adresu „z www” na „bez www”

Do celów SEO lepiej, jeśli wyszukiwarki internetowe widzą naszą stronę pod jednym adresem: „z www” lub „bez www”. W przypadku Google można to ustawić korzystając z Narzędzi dla webmasterów, jednak bardzo prosto można to także osiągnąć w pliku .htaccess. Gdy chcemy, aby nasza strona była dostępna tylko pod adresem „posiadającym www”, należy zastosować regułę:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^nasza-strona.pl$ [NC] 
RewriteRule ^(.*)$ http://www.nasza-strona.pl/$1 [R=301,L]
</IfModule>

W celu przekierowania w drugą stronę ( tj. z „bez www” na „z www”), należy dokonać małej modyfikacji:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.nasza-strona.pl$ [NC]
RewriteRule ^(.*)$ http://nasza-strona.pl/$1 [R=301,L]
</IfModule>

Strony błędów

Plik .htaccess umożliwia także włączenie własnych stron błędów. Wystarczy zastosować następujące reguły:

ErrorDocument 404 "Błąd: nie ma takiego dokumentu"
ErrorDocument 403 /katalog/error403.html

Wynikiem wywołania pierwszej reguły będzie wyświetlenie podanego tekstu. W drugim przypadku nastąpi przekierowanie na dokument HTML zawierający odpowiednie informacje.

Blokada dostępu do katalogu

Przy pomocy .htaccess można także zablokować dla nieporządnych użytkowników dostęp do określonego katalogu. Bez podania loginu i hasła nie będzie możliwe przeglądanie jego zawartości. Można tego dokonać, stosując poniższy kod:

AuthType Basic
AuthName "Podaj login i hasło"
AuthUserFile /katalog/.htpasswd
Require user uzytkownik1 uzytkownik2 uzytkownik3

Nakłada on blokadę dostępu na katalog, w którym znajduje się plik .htaccess. Uprawnionych do korzystania użytkowników podano w regule Require user. Poszczególne loginy i zaszyfrowane hasła powinny znajdować się w pliku .htpasswd w formacie login:hasło. Z punktu widzenia bezpieczeństwa plik ten nie powinien być umieszczony w ogólnodostępnym katalogu www. Do jego wygenerowania możemy wykorzystać program htpasswd rozpowszechniany z Apache lub jeden z wielu generatorów dostępny on-line.

Gdy użytkowników jest więcej, możemy skorzystać z grup. Wystarczy zmodyfikować w następujący sposób plik .htaccess:

AuthType Basic
AuthName "Podaj login i hasło"
AuthUserFile /katalog/.htpasswd
AuthGroupFile /katalog/.htgroup
Require group grupa1 grupa2

Należy dodatkowo utworzyć plik .htgroup, zawierający nazwy grup oraz przypisanych im użytkowników. Przykładowo może on wyglądać w następujący sposób:

grupa1: uzytkownik1 uzytkownik2
grupa2: uzytkownik3 uzytkownik4 uzytkownik5
grupa3: uzytkownik6

W tym przypadku, oprócz sprawdzania poprawności nazwy użytkownika i hasła, weryfikowana jest przynależność do wymaganej grupy.

Blokada hotlinkowania

Hotlinkowanie polega na wstawianiu na obcych stronach www zdjęć lub innych obiektów, które są wczytywane z naszej witryny internetowej. Przez to nieuczciwy użytkownik może zaoszczędzić transfer na swoim serwerze, oraz obciążyć nasz.

Dzięki regułom w .htaccess możemy jednak pozbyć się tego problemu:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?nasza-strona\.pl [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [L]

Warunek sprawdza, czy wywołanie pochodzi z nasze strony lub jest puste. W przeciwnym razie zablokuje dostęp do plików o rozszerzeniach jpg, jpeg, png, gif. Listę można rozszerzyć o inne, niekoniecznie graficzne, np. pdf, doc, xls, itd.

Zamiast blokować hotlinkowanie, możemy przekierować ruch na inny adres. W ten sposób postąpił kiedyś pewien sprzedawca internetowy, którego grafiki były hotlinkowane przez innego handlarza na Allegro. Zdjęcia, które pojawiły się zamiast tych przedstawiających wystawione przedmioty były dość obsceniczne, przez co ich właściciel dość mocno odegrał się na złodzieju transferu.

Przekierowanie na inny adres w wyniku hotlinkowania plików można osiągnąć przez modyfikację jednej z reguł w zaprezentowanym powyżej przykładzie.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?nasza-strona\.pl [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://adres/obrazek.gif [L]

Należy pamiętać, że przy takim przekierowaniu następuje wyświetlenie obrazka, co zużywa nasz transfer.

Dodaj komentarz