chevron-left chevron-right

Piotr Nalepa Frontend, architektura i AI

[htaccess] Zabawa z .htaccess – sposoby wykorzystania pliku .htaccess

Ta wersja
blog.piotrnalepa.pl/2009/09/02/htaccess-zabawa-z-htaccess-sposoby-wykorzystania-pliku-htaccess
Opublikowano
Autor
, Staff Software Engineer
Kategorie
Inne, Webmastering
Uwagi
Napisz do mnie · Napisz na X

Ten wpis ma 17 lat. Od tego czasu przeglądarki i narzędzia mogły się zmienić, więc zanim użyjesz kodu, sprawdź go z aktualną dokumentacją.

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.

  1. 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:

    Przykład 1HTACCESS
                    # 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]

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

    Przykład 2HTACCESS
                	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.

  3. 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:

    Przykład 3HTACCESS
                    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]

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

    Przykład 4HTACCESS
                	RewriteEngine On
    				RewriteRule ^(.*)$ http://www.twojanowastrona.pl/$1 [R=301,L]

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

    Przykład 5HTACCESS
                	Options All -Indexes

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

    Przykład 6HTACCESS
                	# 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)
  7. 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:

    Przykład 7HTACCESS
                	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):

    Przykład 8HTACCESS
                	: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:

    Przykład 9HTPASSWD
                	piotr:aDfk89sKl
    				nalepa:ws34dfFC

    Dodatkowo, istnieje możliwość udostępniania folderów wedle numeru IP. Reguła wygląda następująco:

    Przykład 10HTACCESS
                	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

Udostępnij
Uwagi

O autorze

Staff Software Engineer

Piszę na tym blogu od 2009 roku, a strony i aplikacje webowe tworzę zawodowo od 14 lat. Obecnie w Bishop Fox prowadzę frontend platformy Cosmos, od samego początku projektu. Wcześniej pracowałem m.in. w OLX, KUDO, Auto1 i eZ Systems. Piszę tu o tym, czego nauczyłem się w praktyce: o JavaScripcie, TypeScripcie, Reakcie, CSS-ie i architekturze frontendu. Występowałem też jako prelegent na konferencjach w Polsce i Europie. Masz pytanie albo pomysł na wpis? Daj znać!