Poprawa bezpieczeństwa witryny oraz SEO dzięki htaccess

Poprawa bezpieczeństwa witryny oraz SEO dzięki htaccess

Plik htaccess może zrobić całkiem niezłą pracę, jeżeli chodzi o poprawę bezpieczeństwa witryny oraz SEO dla strony internetowej. Może spowodować poprawę pozycji w wyszukiwarkach, ale i totalnie je zniszczyć. Jak na tak mały pliczek, może zrobić wiele brudnej roboty. Oczywiście głównie dla tych, którzy trzymają swoje witryny na serwerach Apache.

Poniżej znajdziesz kilka sztuczek na poprawę bezpieczeństwa witryny oraz SEO dzięki plikowi htaccess.

Zanim zaczniesz zmieniać swój htaccess…

Przed dokonaniem jakichkolwiek zmian w tym pliku, należy zrobić jego kopię zapasową i mieć go pod ręką na wszelki wypadek. Nie należy bać się pracy z htaccess, jednakże trzeba pamiętać, aby nie popełniać błędów w składni językowej. Ponadto wszystko, co jest napisane po „#” jest tylko komentarzem. Jeżeli zapomnisz dodać średnika przy zmianie czegoś w CSS, Twoja strona najwyżej będzie wyglądać kiepsko. Przy pomyłce w pliku htaccess serwer zwróci błąd 500 – Internal Server Error i jeżeli do tego dojdzie, to Twoja witryna przestanie działać. Nie panikuj, przecież zrobiłeś kopię bezpieczeństwa… Prawda? Po prostu przywróć stary htaccess.

Co to jest htaccess?

Plik htaccess ma całe mnóstwo zastosowań. Niektóre są bardzo ważne, a inne mniej. Jego zadaniem jest komunikacja z serwerem i przekazywanie pewnych wskazówek odnośnie do tego, co serwer ma zrobić, gdy internauci odwiedzają Twoją stronę internetową.

Jak stworzyć plik htaccess?

Jeżeli dopiero zaczynasz i nie masz jeszcze pliku htaccess, musisz go stworzyć, a jest dość proste. Kiedy otworzysz katalog, gdzie mieszczą się wszystkie pliki Twojej strony internetowej:

Winscp - tworzenie pliku htaccess

Stwórz zwykły plik o rozszerzeniu .htaccess. Do jego edycji możesz użyć zwykłego notatnika, ale w tym miejscu sugeruję Ci, abyś pobrał Notepad++, ponieważ dzięki niemu edycja pliku, który ma poprawić sprawy bezpieczeństwa witryny oraz SEO, będzie znacznie prostsza. Wklej poniższy kod:

<Files .htaccess>
order allow,deny
deny from all
</Files>
Options All -Indexes

Jest to najbardziej podstawowy przykład pliku .htaccess, będzie nam potrzebny tylko na początek. Powyższy kod wykonuje następujące działania:

  • Zabezpiecza plik .htaccess przed podglądem z zewnątrz.
  • Zakazuje listowania plików w folderze, gdzie leży Twoja strona internetowa.

Przykłady htaccess, które wpływają na poprawę bezpieczeństwa witryny oraz SEO:

1. Rozwiązywanie problemu z kanonicznymi adresami URL za pomocą htaccess.

Pierwszym problemem, z którym będziesz chciał się uporać, są kanoniczne adresy URL. Co to są kanoniczne adresy i dlaczego należy je stosować? Tutaj odsyłam do artykułu Google.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.domena\.com$ [NC]
RewriteRule ^(.*)$ http://domena.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://domena.com/$1 [R=301,L]

Powyższy kod przedstawia sytuację, gdy chcesz przekierować użytkowników z www.domena.com na domena.com. Ponadto plik htaccess przekieruje wszystkie strony index.html (jeżeli występuje u Ciebie index.php, to musisz zmodyfikować odpowiednio powyższy kod) na poprawny adres kanoniczny. Na pierwszy rzut oka, wydaje się, że nie ma to nic wspólnego z SEO, gdy używamy strony z www czy bez. Jednakże musisz pamiętać o tym, że witryna z www i witryna bez www, to dwie różne strony internetowe i musisz wybrać, której wersji będziesz używać. Dlaczego? Aby uniknąć duplikowania treść Twojej witryny.

2. Kod htaccess, który tworzy czyste adresy URL.

Następną rzeczą, którą należy wykonać za pomocą htaccess, jest stworzenie czystych adresów URL bez końcówek html lub php.

Porównaj oba adresy URL
http://domena.com/blog/jak-wybrać-nazwę-domeny.php

oraz

http://domena.com/blog/jak-wybrać-nazwę-domeny

Czysty URL oznacza brak rozszerzenia strony internetowej. Jak to zrobić?

RewriteBase /
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

Ten kod będzie działał również dla PHP (powinien; zależy to od serwera – sprawdź jego działanie i jeżeli nie będzie ucinało końcówek php, odpowiednio zmodyfikuj kod). Działanie kodu jest proste, ucina wszystkie końcówki .html.

WAŻNE! Aby kod powyższy kod odpowiednio działał, trzeba usunąć rozszerzenia .php lub .html w kodzie strony:

<a href="/podstrona.html">...</a>

zmieniamy na:

<a href="/podstrona">...</a>

3. Jak pozbyć się ukośnika z adresu URL przy użyciu htaccess?

Po dodaniu kodu na czyste URL-e okaże się, że niektóre strony miały na końcu ukośnik, a inne nie. Adres z ukośnikiem oznacza katalog, a bez – zwykły plik. W większości przypadków obie wersje tych adresów URL będą miały taką samą treść, co może być problematyczne dla wyszukiwarek. Taka błahostka, jak „/” może spowodować pojawienie się duplikatów strony, co nie jest dobrą rzeczą. Poniżej znajduje się kod, który upora się z tymi nieszczęsnymi ukośnikami:

RewriteEngine On
RewriteRule ^(.*)/$ http://%{HTTP_HOST}/$1

4. Kod htaccess dla kompresji GZIP.

GZIP to program, który służy do bezstratnej kompresji danych. Dzięki niemu nasza strona internetowa będzie ładować się o wiele szybciej. Jak to zrobić? Plik htaccess przychodzi znowu z pomocą. Niektóre serwery mają odgórnie nałożoną kompresję GZIP i nie potrzebujemy do tego żadnego nowego kodu. Sprawdzić to możesz na stronie Gift of Speed. Jeżeli odpowiedź jest negatywna, to musisz skorzystać z dobrodziejstw htaccess:

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Powyższy kod kompresuje pliki HTML, CSS, JavaScript, PHP itd.

5. Jak skonfigurować cache przeglądarki za pomocą htaccess?

Następnym krokiem na rzecz poprawy bezpieczeństwa witryny oraz SEO jest przetestowanie witryny przez Google PageSpeed Insights lub Pingdom Website Speed Test. Owe narzędzia sprawdzą szybkość Twojej strony internetowej i sporządzą odpowiedni raport. Możliwe, że zaproponują Ci wykorzystanie cache przeglądarki, aby zmniejszyć czas ładowania strony, umożliwiając pobranie odpowiednich plików do pamięci podręcznej (cache) przeglądarki. Po co to wszytko? Przeglądarka sama pobierze wszystko i będzie używać plików przez określony czas, zamiast pobierać je za każdym razem, gdy internauci będą odwiedzać Twoją stronę internetową. Jak już pewnie się domyślasz, możesz to ustawić wykorzystując htaccess:

<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
ExpiresByType text/cache-manifest "access plus 0 seconds"
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType image/x-icon "access plus 1 week"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/x-component "access plus 1 month"
ExpiresByType font/truetype "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
<IfModule mod_headers.c>
Header append Cache-Control "public"
</IfModule>
</IfModule>

6. Protokół HTTPS tylko dla poszczególnych podstron witryny, używając htaccess.

Rozważmy następujący przykład. Mamy tylko jedną podstronę, która wymaga protokołu HTTPS. Używając htaccess, możemy osiągnąć to w prosty sposób. Spójrz na poniższy kod:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/secure/(.*)$ [NC]
RewriteRule ^(.*)$ https://domena.pl/$1 [R=301,L]

Spowoduje to przepisanie adresu:

http://domena.com/formularz-logowania

Na adres URL z HTTPS:

https://domena.com/formularz-logowania

7. Łączenie RewriteCond w htaccess.

Na pewno zdarzy się tak, że będziesz musiał stworzyć przekierowania kilku podstron na jedną. Z htaccess, jak zwykle, jest to bułka z masłem:

RewriteCond %{REQUEST_URI} ^/podstrona-1 [OR]
RewriteCond %{REQUEST_URI} ^/podstrona-2 [NC]
RewriteRule ^(.*)$ http://domena.com/podstrona-3 [R=301,L]

W tym przypadku wejście na podstrony 1 i 2 będzie skutkowało natychmiastowym przekierowaniem na podstronę 3. O co chodzi z tymi wszystkimi przekierowaniami? Już wyjaśniam.

8. Przekierowania 301 w htaccess:

Powszechnie wiadomo, że przekierowania 301 są niezbędne dla odzyskania siły z nieistniejących już linków. Zdarza się to bardzo często przy migracji strony internetowej na inną domenę lub zmiany systemu CMS, który ma inną strukturę generowania linków. W ten sposób tworzymy sobie setki błędów 404. Jak temu zapobiec? Dzięki przekierowaniom 301.

Przekierowanie 301 całej domeny

Jeżeli chcesz przenieść całą stronę na inną domenę, musisz użyć przekierowania 301 całej domeny:

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

Powyższy kod przekieruje:

http://www.domena.com/strona

Na nową domenę:

http://www.nowa-domena.com/strona

Przekierowanie 301 pojedynczej podstrony

Redirect 301 /strona http://domena.com/strona

RedirectMatch 301

RedirectMatch 301 różni się odrobinę od Redirect 301. Używając go z głową, możesz przekierować wiele adresów URL pisząc tylko jedną linijkę kodu. Przykład:

RedirectMatch 301 /buty-(.*).html /kategoria/buty-$1.html

Powyższy kod przekieruje:

http://www.domena.com/buty-nike-shox.html

Na:

http://www.domena.com/kategoria/buty-nike-shox.html

Użyliśmy wyrażenia regularnego (.*), aby opisać to, co jest po buty- oraz przed .html, co sprawia, że wszystkie strony pomiędzy buty- a .html będą przekierowane do folderu kategoria bez naruszenia ich nazw. W ten sposób, dodając tylko jedną linijkę kodu do naszego htaccess, uporaliśmy się z przekierowaniami 301 dla wszystkich starych podstron o nazwie buty-XYZ.html.

9. Ustawienie własnej strony błędów 404 w htaccess.

Dzięki htaccess można stworzyć niestandardowe strony błędów. Przykład:

ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php

10. Ustawienie parametru charset za pomocą htaccess.

Możesz dodać parametr charset do witryny w pliku htaccess i usunąć kod ze strony internetowej. Dzięki temu zmniejszysz ilość zapytań HTTP, co przyspieszy delikatnie Twoją stronę:

AddCharset UTF-8 .html

11. Bezpieczeństwo Twojego htaccess.

Ten fragment kodu służy do zabezpieczenia odczytu pliku .htaccess. Blokuje dostęp, więc nikt z zewnątrz nie będzie mógł go odczytać, edytować, ani pobierać.

<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

12. Zaznaczenie lokalizacji robots.txt w htaccess.

Pomóż botom w odnalezieniu robots.txt. Na pierwszy rzut oka, może się to nie wydawać problemowe, ale niestety głupie boty i złośliwe skrypty lubią skanować całą stronę w poszukiwaniu robots.txt. Na szczęście jest htaccess i odpowiedni kod, aby uporać się z tym:

<IfModule mod_rewrite.c>
RewriteBase /
RewriteCond %{REQUEST_URI} !^/robots.txt$ [NC]
RewriteCond %{REQUEST_URI} robots\.txt [NC]
RewriteRule .* http://domena.com/robots.txt [R=301,L]
</IfModule>

Powyższy kod przekierowuje wszystkie zapytania dotyczące robots.txt tylko do jednego pliku. Jeżeli nie chcesz używać RewriteCond, możesz wykonać to samo za pomocą przekierowania 301:

RedirectMatch 301 ^/(.*)/robots\.txt http://domena.com/robots.txt

13. Zaznaczenie lokalizacji mapy strony w htaccess.

Czasami zdarza się tak, że boty pomimo jasnego zdeklarowania w robots.txt mapy strony, nie mogą jej odnaleźć i błędnie wnioskują, że nasza strona nie posiada żadnej mapy strony. Wpływa to negatywnie na poziom bezpieczeństwa witryny oraz SEO. Aby wyeliminować takie działanie, pomóż robotom odnaleźć mapę witryny. Do tego użyjmy ponownie pliku htaccess:

<IfModule mod_alias.c>
RedirectMatch 301 /sitemap\.xml$ http://domena.com/sitemap.xml
RedirectMatch 301 /sitemap\.xml\.gz$ http://domena.com/sitemap.xml.gz
</IfModule>

Pierwsza reguła przekierowuje wszystkie żądania do nieskompresowanej mapy strony, zaś druga do skompresowanej wersji mapy strony.

14. Zaznaczenie lokalizacji favicons w htaccess.

Awatary, gravatary i favicony są wielkim hitem wśród skanerów stron internetowych. Złośliwy kod przeczesuje całą strukturę witryny w ich poszukiwaniu. Możemy to powstrzymać w pliku robots.txt, ale to nie zawsze działa. Działać za to będzie odpowiedni kod w htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/favicon.ico$ [NC]
RewriteCond %{REQUEST_URI} /favicon(s)?\.?(gif|ico|jpe?g?|png)?$ [NC]
RewriteRule (.*) http://domena.com/favicon.ico [R=301,L]
</IfModule>

Poprawa bezpieczeństwa witryny oraz SEO dzięki htaccess – podsumowanie

Z plikiem htaccess możesz w krótkim czasie sprawić, że poprawa bezpieczeństwa witryny oraz SEO będzie znacznie prostsza, niż Ci się wydaje na samym początku. Wiem, że napisałem sporo informacji na ten temat i może być to na pierwszy rzut oka bardzo kłopotliwe. Wiem również, że po przeczytaniu mojego wpisu dojdziesz do wniosku, że ten mały pliczek potrafi wykonać ogromną pracę na rzecz bezpieczeństwa witryny oraz SEO. Dlatego ta podstawowa wiedza, którą Ci przekazałem, może w przyszłości bardzo ułatwić Ci życie.

Spodobał Ci się ten tekst?

Jeśli sądzisz, że moglibyśmy Tobie pomóc, odezwij się do nas. Wypełnij bardzo prosty formularz szybkiej wyceny. Gwarantujemy szybką odpowiedź.

  1. Karina Kondraczuk

    Bardzo dobry wpis. Dziękuję.

    Odpowiedz
  2. Krzysztof Woźny

    Witam a jak zrobić przekierowanie HTTPS np jak ma google /
    https://google.pl -> https://www.google.pl

    Odpowiedz
    • MobileTry logo
      MobileTry

      Krzysztofie, wypróbuj to:
      RewriteCond %{HTTP_HOST} !^www.
      RewriteCond %{HTTPS}s on(s)|
      RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      Ważne: musi być na samym początku wśród linijek odpowiadających za przekierowania, jeżeli używasz jeszcze jakichś dodatkowych.

  3. Zdz h. Leliwa

    Witam jak ustawić długość ” pamięci podręcznej na stronie-pliku blad-404.html
    Sprawdzanie seo wyświetla ten czas na 1sek – dobrze?

    Odpowiedz
    • MobileTry logo
      MobileTry

      Nie do końca rozumiemy, w czym problem. Jeżeli jakiś tester wykazuje już zdefiniowany czas (1 sekundę), to co chciałby Pan uzyskać? Czy chce Pan wydłużyć ten czas?

    • Zdz h. Leliwa

      W wynikach walidacji seo jest zaznaczony ten błąd. Czy można wydłużyć ten czas choćby o 2dni ?
      I druga kwestia – jeżeli można : czy przy pomocy pliku .htaccess zrobić przekierowanie adresu IP na domenę?

    • MobileTry logo
      MobileTry

      Można wydłużyć czas przetrzymywania w pamięci dowolnych typów treści – wystarczy zmienić dla odpowiedniego typu (w tym przypadku HTML) np. „access plus 1 week” na „access plus 1 month”, aby zmienić ten czas z jednego tygodnia na jeden miesiąc.

      RewriteEngine On
      RewriteBase /
      RewriteCond %{HTTP_HOST} ^12.34.56.789$
      RewriteRule ^(.*)$ http://www.nazwadomeny.pl/$1 [L,R=301]

      Z kolei ww. kod realizuje przekierowanie IP na domenę.

  4. Mazuel

    Super jasny i klarowny artykuł. Dużo najważniejszych i formacji w pigulce. Dziekuje.

    Odpowiedz
  5. Anom Gall

    Witam, mam takie pytanie odnośnie przepisywania adresów i ich przekierowania żeby nie było duplikowania treści. Przykładowo po przepisaniu adresu mam stronę „http://przykladowa-strona/kontakt” i taka jest w hiperłączach na stronie ale też pozostaje przecież strona oryginalna „http://przykladowa-strona/kontakt.php” i co wtedy? Czy to nie będzie wtedy duplikacja treści? Czy może wtedy trzeba oprócz przepisania adresu „kontakt.php” na „kontakt” dodatkowo zrobić jeszcze przekierowanie 301 „kontakt.php” na „kontakt”. Tylko wtedy pojawia się błąd: pętla przekierowań. Czy jest jakiejś rozwiązanie tego problemu? I jak to jest z tym slashem na końcu, czy nie odchodzi się od tego znaku na końcu, bo to dodatkowy znak i w sumie daje mylne wrażenie że to katalog?

    Odpowiedz
    • MobileTry logo
      MobileTry

      Oczywiście adresy URL muszą być możliwie najkrótsze, zatem pozbywanie się wszelkich dodatków np. w postaci „.php” jest mocno wskazane. Do tego należy dopisać odpowiednie reguły w .htaccess, które automatycznie będą usuwały „końcówki”. W kwestii znaczka „/” na końcu, nie jesteśmy jego zwolennikami. Wyjątek – przynajmniej u siebie – stosujemy dla podstron zbiorczych typu /blog/ czy też adresy kategorii, jako wskazanie, że poniżej tych adresów znajdują się jeszcze bardziej szczegółowe (a konkretniej – wpisy blogowe).

  6. Maciej Caputa

    Przydatna wiedza. Dzięki !

    Odpowiedz
Oświadczam, że akceptuję postanowienia zawarte w polityce prywatności. *

Jakub Ozorowski

Co-founder agencji interaktywnej MobileTry z Olsztyna, świadczącej kompleksowe usługi przede wszystkim małym firmom. Specjalizacją agencji jest tworzenie stron internetowych i sklepów internetowych. Ponadto MobileTry prowadzi kampanie reklamowe w internecie oraz oferuje usługi z zakresu pozycjonowania.

Mało czytania? Nie ma problemu!

Sprawdź inne teksty powiązane z tym artykułem

Michał Ziółkowski

5 lat temu

Utrzymywanie strony internetowej opartej o WordPressa – 8 porad

Na czym konkretnie polega utrzymywanie strony internetowej opartej o WordPressa? Jakich wytycznych należy się trzymać, aby należycie dbać o własny serwis?

Jakub Ozorowski

5 lat temu

Bezpieczny WordPress – 10 rzeczy, o których musisz pamiętać

Czym charakteryzuje się bezpieczny WordPress? Jakich zasad warto jest się trzymać, aby zminimalizować szansę na zainfekowanie strony? Poznaj nasze porady.

Bartłomiej Kiljan

5 lat temu

Jak sprawdzić, czy sklep internetowy jest wiarygodny? – 8 porad

Na rynku dostępnych jest cała masa sklepów online. Niemniej jednak, jak sprawdzić, czy sklep internetowy jest wiarygodny? Zobacz nasze wskazówki.

Michał Ziółkowski

5 lat temu

Bezpieczna strona internetowa – czym powinna się charakteryzować?

Jak wygląda bezpieczna strona internetowa? W jaki sposób poprawić jej poziom bezpieczeństwa? Odpowiedzi na te pytania znajdziesz w niniejszym wpisie.

Michał Ziółkowski

6 lat temu

Jak uczynić stronę internetową godną zaufania? – 11 pomysłów

Czasem tak mamy, że w trakcie przeglądania stron internetowych natrafiamy na witrynę, której na pierwszy rzut oka nie ufamy. Po prostu jest w niej coś, co sprawia, że nie jesteśmy do niej przekonani. Zatem jak uczynić stronę internetową godną zaufania? Przeczytaj nasze sprawdzone porady na ten temat.

Bartłomiej Kiljan

7 lat temu

Zhakowany WordPress – 13 oznak zainfekowanego WordPressa

Szybko wykryty zhakowany WordPress pozwala zatrzymać kolejne infekcje i uratować dane. Zobacz zatem, jak rozpoznać, że system WordPress został zhakowany.