[htaccess] Zabawa z .htaccess – sposoby wykorzystania pliku .htaccess
Musiałem od nowa napisać ten artykuł na temat .htaccess, bowiem w wyniku małego wypadku związanego z bazą danych utraciłem artykuł.
Plik .htaccess jest bardzo ciekawym plikiem, bowiem jest on odpowiedzialny za konfigurację zachowania się serwera, to znaczy w nim możemy zdefiniować odpowiednie reguły dotyczące tworzenia przyjaznych linków czy tez blokowania do zasobów serwera osobom niepowołanym.
-
Przyjazne linki
Ten efekt jest możliwy do osiągnięcia tylko w przypadku działającego mod_rewrite na serwerach typu Apache.
Jeśli witryna w której chcemy wykorzystać przyjazne linki ma skomplikowane adresy www poszczególnych stron, które wyglądają na przykład tak: www.twojastrona.pl/index.php?id=jakas.
Taki wygląd linka na pewno nie jest dobrym pomysłem, jesli chcemy by Google dobrze zaindeksowało stronę pod takim linkiem.
Możemy to zmienić za pomocą następującej reguły:# inicjujemy rewrite engine RewriteEngine on # dla przykładu z www.twojastrona.pl/id/jakas/ RewriteRule ^strona/([^/.]+)/?$ index.php?id=$1 [L] # dla przykładu z www.twojastrona.pl/jakas/ RewriteRule ^/([^/.]+)/?$ index.php?jakas=$1 [L]
-
Znak "/" na końcu adresu URL
Przepisując adresy za pomocą reguły podanej wyżej należy pamiętać o znakach "/" by wystąpiły na koncu adresu.
RewriteEngine on # nie dodajemy nic jeśli żądany plik istnieje RewriteCond %{REQUEST_FILENAME} !-f # sprawdzamy czy dany URL nie ma slasha na końcu RewriteCond %{REQUEST_URI} !(.*)/$ # jeśli nie ma, przepisujemy URL z przekierowaniem 301 RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
Należy pamiętać, aby dla celów testowych ustawić R=302 zamiast R=301. Dzięki temu przeglądarka wie, że taki adres jest tymczasowy i taki adres będzie sprawdzany za każdym razem przez przeglądarkę, czy ma taką postać. Inaczej ten adres byłby przyjęty jako ostateczny i mogłyby wystapić włęby w przekierowaniach na strony WWW.
-
Przekierowanie adresów z www na bez www i na odwrót
Wg Google, adresy www.twojastrona.pl i twojastrona.pl to dwie odrębne domeny, przez co musimy zadbać o to, aby obydwa adresy przekierowywały na tą samą stronę, a nie na dwie różne. Należy wybrać jeden typ adresu jako główny, a drugi przekierować na ten główny.
Dzięki temu unikniemy też, tak zwanego, duplicate content.
Do tego zabiegu służy następująca reguła:RewriteEngine on # przekierowanie dla przykładu www -> bez www RewriteCond %{HTTP_HOST} ^www.twojastrona.pl$ [NC] RewriteRule ^(.*)$ http://twojastrona.pl/$1 [R=301,L] # przekierowanie dla przykładu bez www -> www RewriteCond %{HTTP_HOST} !^www. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
-
Przekierowanie na nową domenę
Za pomocą pliku .htaccess możemy przekierować użytkownika Internetu na nową domenę. Tutaj ważne jest to, aby struktura folderów strony na nowej domenie nie uległa zmianie.
RewriteEngine On RewriteRule ^(.*)$ http://www.twojanowastrona.pl/$1 [R=301,L]
-
Zabezpieczenie folderu przed listowaniem plików
Z reguły w folderach powinno się dawać puste pliki.html, ale jesli nie możemy takowego pliku dać do folderu lub nie chcemy, to możemy wykorzystać poniższą regułę. Dzięki temu zabezpieczymy zasoby serwera przed przeglądaniem przez niepowołane osoby.
Options All -Indexes
-
Własne strony błedów
Czasem chcemy zmienić standardowe strony błędów na swoje własne, nawiązujące bardziej do naszej strony.
# dla błędu 404 - File not found (nie znaleziono pliku) ErrorDocument 404 /404.html # dla błędu 500 - Internal Server Error (wewnętrzny błąd serwera) ErrorDocument 500 /500.html
Inne strony błędów jakie możemy zdefniować to:
- 400 ? Bad request (niepoprawne żądanie)
- 401 ? Authorization Required (wymagana autoryzacja)
- 403 ? Forbidden (dostęp zabroniony)
-
Zabezpieczanie dostępu do folderów hasłem
Jest to bardzo przydatna opcja. Szczególnie przydatna do zabezpieczania dostępu do zaplecza administracyjnego stron. Jako uzupełnienie zwykłego logowania opartego o bazy danych.
Na serwerach typu Apache stosujemy następującą regułę w .htaccess:AuthType basic AuthName "Musisz się zalogować" AuthUserFile /sciezka_bezwgledna_do_folderu_na_serwerze/.htpasswd Require valid-user
Natomiast na serwerach typu IdeaWebServer (home.pl korzysta z tego typu serwerów):
:Location /public_html/folder AuthUserFile /sciezka_bezwgledna_do_folderu_na_serwerze/.htpasswd Access allow all valid-user :Location
Dodatkowo należy stworzyć plik z hasłami, czyli .htpasswd i umieścić go w miejscu, które podaliśmy w AuthUserFile. Ten plik wygląda na przykład tak:
piotr:aDfk89sKl nalepa:ws34dfFC
Dodatkowo, istnieje możliwość udostępniania folderów wedle numeru IP. Reguła wygląda następująco:
AuthType basic AuthName "Witryna wymaga autoryzacji" AuthUserFile /sciezka_bezwgledna_do_folderu_na_serwerze/.htpasswd AuthGroupFile /dev/null Require valid-user Deny from all Allow from xxx.xxx.xx.xx Satisfy Any