chevron-left chevron-right

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

  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:

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

                	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:

                    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.

                	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.

                	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.

                	# 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:

                	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