{"id":6282,"date":"2018-08-14T13:04:03","date_gmt":"2018-08-14T11:04:03","guid":{"rendered":"https:\/\/nprofit.net\/pl\/?page_id=6282"},"modified":"2026-07-31T11:40:36","modified_gmt":"2026-07-31T09:40:36","slug":"htaccess-seo","status":"publish","type":"post","link":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/","title":{"rendered":"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia"},"content":{"rendered":"<p>.htaccess to plik konfiguracyjny serwera Apache, kt\u00f3ry steruje ruchem na stronie, zanim uruchomi si\u0119 jakikolwiek skrypt. W praktyce najcz\u0119\u015bciej s\u0142u\u017cy do trzech rzeczy: przekierowania 301 ze starego adresu na nowy, wymuszenia jednej wersji domeny (HTTPS, z www lub bez) oraz blokowania niechcianego ruchu po adresie IP czy nazwie bota. Plik dzia\u0142a wy\u0142\u0105cznie na serwerach Apache i LiteSpeed, na Nginx te same regu\u0142y trzeba przepisa\u0107 bezpo\u015brednio w konfiguracji serwera.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #003366;color:#003366\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #003366;color:#003366\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Czym_jest_plik_htaccess_i_do_czego_sluzy\" >Czym jest plik .htaccess i do czego s\u0142u\u017cy?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Tworzenie_pliku_htaccess_lokalizacja_skladnia_przyklad\" >Tworzenie pliku .htaccess: lokalizacja, sk\u0142adnia, przyk\u0142ad<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Przekierowanie_301_w_htaccess_gotowe_reguly_i_roznice_wzgledem_302\" >Przekierowanie 301 w .htaccess: gotowe regu\u0142y i r\u00f3\u017cnice wzgl\u0119dem 302<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Wymuszenie_HTTPS_i_jednej_wersji_domeny_www_albo_bez_www\" >Wymuszenie HTTPS i jednej wersji domeny (www albo bez www)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Blokowanie_adresow_IP_botow_i_ruchu_odsylajacego\" >Blokowanie adres\u00f3w IP, bot\u00f3w i ruchu odsy\u0142aj\u0105cego<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#blokada_wszystkich_odwiedzajacych\" >blokada wszystkich odwiedzaj\u0105cych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#blokada_jednego_wybranego_adresu_IP\" >blokada jednego wybranego adresu IP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Ochrona_haslem_i_zabezpieczenia_WordPressa_w_htaccess\" >Ochrona has\u0142em i zabezpieczenia WordPressa w .htaccess<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#blokada_bezposredniego_dostepu_do_pliku_konfiguracyjnego\" >blokada bezpo\u015bredniego dost\u0119pu do pliku konfiguracyjnego<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#blokada_wykonywania_plikow_PHP_w_katalogu_przesylania_mediow\" >blokada wykonywania plik\u00f3w PHP w katalogu przesy\u0142ania medi\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Strona_bledu_404_ochrona_przed_hotlinkowaniem_i_cache_plikow_statycznych\" >Strona b\u0142\u0119du 404, ochrona przed hotlinkowaniem i cache plik\u00f3w statycznych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Wyrazenia_regularne_w_htaccess_koncowki_html_parametry_przyjazne_adresy\" >Wyra\u017cenia regularne w .htaccess: ko\u0144c\u00f3wki .html, parametry, przyjazne adresy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Najczestsze_pytania_o_htaccess_i_przekierowania_301\" >Najcz\u0119stsze pytania o .htaccess i przekierowania 301<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Czym_rozni_sie_przekierowanie_301_od_302\" >Czym r\u00f3\u017cni si\u0119 przekierowanie 301 od 302?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Dlaczego_po_dodaniu_reguly_w_htaccess_strona_pokazuje_blad_500\" >Dlaczego po dodaniu regu\u0142y w .htaccess strona pokazuje b\u0142\u0105d 500?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Czy_plik_htaccess_dziala_na_kazdym_hostingu\" >Czy plik .htaccess dzia\u0142a na ka\u017cdym hostingu?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Czy_blednie_skonfigurowane_przekierowania_szkodza_widocznosci_w_Google\" >Czy b\u0142\u0119dnie skonfigurowane przekierowania szkodz\u0105 widoczno\u015bci w Google?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#Czym_jest_RewriteCond_i_czym_rozni_sie_od_RewriteRule\" >Czym jest RewriteCond i czym r\u00f3\u017cni si\u0119 od RewriteRule?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Czym_jest_plik_htaccess_i_do_czego_sluzy\"><\/span>Czym jest plik .htaccess i do czego s\u0142u\u017cy?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nazwa pliku to <code>.htaccess<\/code>, bez rozszerzenia i bez \u017cadnego cz\u0142onu przed kropk\u0105, to jest ca\u0142a nazwa. Serwer Apache sprawdza obecno\u015b\u0107 takiego pliku w ka\u017cdym katalogu, przez kt\u00f3ry przechodzi \u017c\u0105danie, i stosuje zawarte w nim regu\u0142y, zanim przeka\u017ce \u017c\u0105danie dalej do PHP czy innego j\u0119zyka wykonuj\u0105cego stron\u0119.<\/p>\n<p>Na hostingu wsp\u00f3\u0142dzielonym to zwykle jedyny spos\u00f3b na zmian\u0119 konfiguracji serwera, bo dostawca nie daje dost\u0119pu do g\u0142\u00f3wnego pliku httpd.conf. Dlatego .htaccess odpowiada nie tylko za przekierowania, ale te\u017c za strony b\u0142\u0119d\u00f3w, ochron\u0119 has\u0142em, limity dost\u0119pu i nag\u0142\u00f3wki cache. Ka\u017cdy podkatalog i ka\u017cda subdomena mog\u0105 mie\u0107 w\u0142asny plik .htaccess, kt\u00f3ry nadpisuje regu\u0142y z katalogu g\u0142\u00f3wnego dla tej konkretnej \u015bcie\u017cki.<\/p>\n<p>Ograniczenie, o kt\u00f3rym warto wiedzie\u0107 od razu: mechanizm dzia\u0142a tylko na serwerach Apache oraz kompatybilnym z nim LiteSpeed. Na Nginx plik .htaccess jest ignorowany, a te same regu\u0142y przepisuje si\u0119 w bloku konfiguracyjnym server na poziomie systemu. Sprawdzenie, na jakim oprogramowaniu stoi hosting, jest pierwszym krokiem przed wdro\u017ceniem jakiejkolwiek regu\u0142y, bo skopiowanie gotowego kodu na z\u0142\u0105 platform\u0119 niczego nie zmieni.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tworzenie_pliku_htaccess_lokalizacja_skladnia_przyklad\"><\/span>Tworzenie pliku .htaccess: lokalizacja, sk\u0142adnia, przyk\u0142ad<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Plik powstaje w dowolnym edytorze tekstu, zapisany jako zwyk\u0142y tekst, i trafia do katalogu g\u0142\u00f3wnego domeny (zwykle public_html albo www), je\u015bli regu\u0142y maj\u0105 obowi\u0105zywa\u0107 w ca\u0142ym serwisie. Notatnik systemowy Windows bywa problematyczny, bo domy\u015blnie dopisuje rozszerzenie .txt do nazwy, dlatego wygodniej u\u017cy\u0107 edytora kodu (Notepad++, VS Code, Sublime Text) albo utworzy\u0107 plik od razu na serwerze przez mened\u017cer plik\u00f3w hostingu.<\/p>\n<p>Ka\u017cdy zestaw regu\u0142 opartych na przekierowaniach zaczyna si\u0119 od w\u0142\u0105czenia modu\u0142u:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>&#8222;`<\/p>\n<p>Bez tej linii kolejne dyrektywy RewriteCond i RewriteRule s\u0105 ignorowane. Poni\u017cej przyk\u0142ad pliku, kt\u00f3ry wymusza wersj\u0119 bez www i przenosi jeden konkretny, usuni\u0119ty adres:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine on<\/p>\n<p>RewriteCond %{HTTP_HOST} ^www\\.domena\\.pl(.*) [NC]<\/p>\n<p>RewriteRule ^(.*)$ https:\/\/domena.pl\/$1 [R=301,L]<\/p>\n<p>RewriteRule ^usuniety-adres$ https:\/\/domena.pl\/nowy-adres [L,R=301]<\/p>\n<p>&#8222;`<\/p>\n<p>Pierwsza para linii sprawdza, czy \u017c\u0105danie przysz\u0142o z przedrostkiem www, i je\u015bli tak, przekierowuje na wersj\u0119 bez www. Flaga [NC] oznacza, \u017ce wielko\u015b\u0107 liter w por\u00f3wnaniu nie ma znaczenia, [R=301] wysy\u0142a kod przekierowania sta\u0142ego, a [L] ka\u017ce Apache zatrzyma\u0107 sprawdzanie kolejnych regu\u0142 po dopasowaniu tej. Druga regu\u0142a dzia\u0142a niezale\u017cnie, bo warunek jest zapisany bezpo\u015brednio w jej pierwszym elemencie, uruchamia si\u0119 tylko dla adresu domena.pl\/usuniety-adres.<\/p>\n<p>Zanim nowy plik trafi na serwer produkcyjny, warto przetestowa\u0107 go na kopii strony albo w \u015brodowisku testowym. B\u0142\u0119dna regu\u0142a, najcz\u0119\u015bciej brakuj\u0105cy uko\u015bnik albo z\u0142a kolejno\u015b\u0107 flag, ko\u0144czy si\u0119 b\u0142\u0119dem 500 dla ca\u0142ej domeny. To oznacza realny przest\u00f3j i utrat\u0119 ruchu na czas naprawy, a nie problem tylko jednej podstrony.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Przekierowanie_301_w_htaccess_gotowe_reguly_i_roznice_wzgledem_302\"><\/span>Przekierowanie 301 w .htaccess: gotowe regu\u0142y i r\u00f3\u017cnice wzgl\u0119dem 302<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Przekierowanie 301 w .htaccess wykonuje dyrektywa RewriteRule, dla wzorc\u00f3w i ca\u0142ych grup adres\u00f3w, albo prostsza Redirect 301, dla pojedynczego, znanego z g\u00f3ry adresu, bez modu\u0142u mod_rewrite. Kod 301 oznacza przekierowanie sta\u0142e: m\u00f3wi przegl\u0105darce i wyszukiwarce, \u017ce stary adres nie wr\u00f3ci, a jego warto\u015b\u0107 rankingowa ma zosta\u0107 trwale przeniesiona na nowy adres. To podstawowe narz\u0119dzie przy zmianie adresu podstrony, migracji na now\u0105 domen\u0119 albo scalaniu dw\u00f3ch wersji tego samego URL-a w jedn\u0105.<\/p>\n<p>Pojedynczy adres, przez RewriteRule:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteRule ^poprzedni-adres$ https:\/\/domena.pl\/nowy-adres [L,R=301]<\/p>\n<p>&#8222;`<\/p>\n<p>Ten sam efekt bez modu\u0142u mod_rewrite:<\/p>\n<p>&#8222;`<\/p>\n<p>Redirect 301 \/stara-podstrona.php https:\/\/domena.pl\/nowa-podstrona.html<\/p>\n<p>&#8222;`<\/p>\n<p>Przeniesienie ca\u0142ej domeny na nowy adres:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{HTTP_HOST} ^poprzednia-domena\\.pl$ [NC]<\/p>\n<p>RewriteRule ^(.*)$ https:\/\/nowa-domena.pl\/$1 [L,R=301]<\/p>\n<p>&#8222;`<\/p>\n<table>\n<thead>\n<tr>\n<th>Metoda<\/th>\n<th>Kod HTTP<\/th>\n<th>Wymaga mod_rewrite<\/th>\n<th>Kiedy stosowa\u0107<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RewriteRule &#8230; [R=301,L]<\/td>\n<td>301, sta\u0142e<\/td>\n<td>Tak<\/td>\n<td>Wzorce adres\u00f3w, ca\u0142e katalogi, migracja domeny<\/td>\n<\/tr>\n<tr>\n<td>Redirect 301<\/td>\n<td>301, sta\u0142e<\/td>\n<td>Nie<\/td>\n<td>Pojedynczy, znany z g\u00f3ry adres<\/td>\n<\/tr>\n<tr>\n<td>RewriteRule &#8230; [R=302,L]<\/td>\n<td>302, tymczasowe<\/td>\n<td>Tak<\/td>\n<td>Testy, chwilowa promocja, strona w przebudowie<\/td>\n<\/tr>\n<tr>\n<td>Meta refresh w HTML<\/td>\n<td>brak kodu 3xx<\/td>\n<td>Nie dotyczy<\/td>\n<td>Odradzane w SEO, wyszukiwarka traktuje to jako sygna\u0142 znacznie s\u0142abszy ni\u017c przekierowanie serwerowe<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>R\u00f3\u017cnica mi\u0119dzy 301 a 302 ma znaczenie finansowe, nie tylko techniczne. Google konsoliduje sygna\u0142y rankingowe wypracowane przez stary adres i przenosi je na docelowy URL wy\u0142\u0105cznie przy przekierowaniu sta\u0142ym (<a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/consolidate-duplicate-urls\" target=\"_blank\" rel=\"noopener\">Google Search Central<\/a>). Oznaczenie migracji jako tymczasowej, czyli kodem 302, sprawia, \u017ce wyszukiwarka d\u0142ugo trzyma w indeksie stary adres i nie przenosi na nowy pozycji, kt\u00f3re wcze\u015bniej przynosi\u0142y ruch i zapytania. Przy migracji ca\u0142ego serwisu albo zmianie struktury adres\u00f3w w sklepie pomy\u0142ka w kodzie przekierowania potrafi kosztowa\u0107 tygodnie spadku widoczno\u015bci na frazach, kt\u00f3re wcze\u015bniej generowa\u0142y zapytania.<\/p>\n<p>Najcz\u0119\u015bciej u\u017cywane flagi w regu\u0142ach RewriteRule:<\/p>\n<ul>\n<li><strong>[L]<\/strong> (Last) &#8211; zatrzymuje sprawdzanie kolejnych regu\u0142 w pliku po dopasowaniu tej.<\/li>\n<li><strong>[R=301]<\/strong> &#8211; wysy\u0142a nag\u0142\u00f3wek przekierowania sta\u0142ego, sam zapis [R] bez numeru oznacza domy\u015blnie 302.<\/li>\n<li><strong>[NC]<\/strong> (No Case) &#8211; dopasowanie niezale\u017cne od wielko\u015bci liter.<\/li>\n<li><strong>[OR]<\/strong> &#8211; \u0142\u0105czy warunek z kolejnym przez logiczne LUB zamiast domy\u015blnego ORAZ.<\/li>\n<li><strong>[F]<\/strong> (Forbidden) &#8211; zwraca b\u0142\u0105d 403 zamiast przekierowania, u\u017cywane przy blokowaniu dost\u0119pu.<\/li>\n<li><strong>[NS]<\/strong> (No Subrequest) &#8211; pomija regu\u0142\u0119 dla wewn\u0119trznych \u017c\u0105da\u0144 serwera.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Wymuszenie_HTTPS_i_jednej_wersji_domeny_www_albo_bez_www\"><\/span>Wymuszenie HTTPS i jednej wersji domeny (www albo bez www)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wymuszenie HTTPS to regu\u0142a przekierowuj\u0105ca ka\u017cde \u017c\u0105danie HTTP na jego odpowiednik szyfrowany:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{HTTPS} off<\/p>\n<p>RewriteRule ^ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<\/p>\n<p>&#8222;`<\/p>\n<p>Dzi\u015b ta regu\u0142a jest praktycznie obowi\u0105zkowa, nie opcjonalna. Certyfikat SSL, najcz\u0119\u015bciej darmowy i wystawiany automatycznie przez hosting w technologii Let&#8217;s Encrypt, jest standardem od lat, a przegl\u0105darki oznaczaj\u0105 ka\u017cdy adres bez HTTPS etykiet\u0105 &quot;Nie zabezpieczona&quot; widoczn\u0105 w pasku adresu, zanim strona w og\u00f3le si\u0119 za\u0142aduje.<\/p>\n<p>Druga r\u00f3wnie cz\u0119sta regu\u0142a porz\u0105dkuje wersj\u0119 z przedrostkiem www i bez niego. Obie wersje pod dwoma r\u00f3\u017cnymi adresami to dla wyszukiwarki dwa osobne URL-e z t\u0105 sam\u0105 tre\u015bci\u0105, wi\u0119c jedn\u0105 z nich trzeba wybra\u0107 jako docelow\u0105.<\/p>\n<p>Wymuszenie wersji bez www:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{HTTP_HOST} ^www\\.domena\\.pl$ [NC]<\/p>\n<p>RewriteRule ^(.*)$ https:\/\/domena.pl\/$1 [R=301,L]<\/p>\n<p>&#8222;`<\/p>\n<p>Wymuszenie wersji z www, regu\u0142a odwrotna:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{HTTP_HOST} ^domena\\.pl$ [NC]<\/p>\n<p>RewriteRule ^(.*)$ https:\/\/www.domena.pl\/$1 [R=301,L]<\/p>\n<p>&#8222;`<\/p>\n<p>Wyb\u00f3r mi\u0119dzy wersj\u0105 z www i bez www nie ma dzi\u015b wi\u0119kszego znaczenia rankingowego, je\u015bli przekierowanie jest ustawione poprawnie i konsekwentnie. Ma za to znaczenie dla zaufania klienta. Strona logowania czy koszyk dost\u0119pne r\u00f3wnolegle pod dwoma adresami bywaj\u0105 odbierane jako mniej wiarygodne, a w bran\u017cach wra\u017cliwych na dane, jak p\u0142atno\u015bci, brak sp\u00f3jnego, szyfrowanego adresu bywa powodem porzucenia transakcji przed jej finalizacj\u0105.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Blokowanie_adresow_IP_botow_i_ruchu_odsylajacego\"><\/span>Blokowanie adres\u00f3w IP, bot\u00f3w i ruchu odsy\u0142aj\u0105cego<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Blokad\u0119 pojedynczego adresu IP, strony odsy\u0142aj\u0105cej albo konkretnego bota .htaccess realizuje przez dyrektywy Order i Deny (klasyczny zapis, wspierany na zdecydowanej wi\u0119kszo\u015bci hostingu przez modu\u0142 zgodno\u015bci wstecznej; na Apache 2.4 odpowiednikiem jest Require ip) oraz przez warunek RewriteCond sprawdzaj\u0105cy nag\u0142\u00f3wek \u017c\u0105dania.<\/p>\n<p>&#8222;`<\/p>\n<h2><span class=\"ez-toc-section\" id=\"blokada_wszystkich_odwiedzajacych\"><\/span>blokada wszystkich odwiedzaj\u0105cych<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Deny from all<\/p>\n<h2><span class=\"ez-toc-section\" id=\"blokada_jednego_wybranego_adresu_IP\"><\/span>blokada jednego wybranego adresu IP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Order Deny,Allow<\/p>\n<p>Deny from 123.45.67.0<\/p>\n<p>&#8222;`<\/p>\n<p>Blokada ruchu z konkretnej strony odsy\u0142aj\u0105cej:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine on<\/p>\n<p>RewriteCond %{HTTP_REFERER} niechcianadomena\\.pl [NC]<\/p>\n<p>RewriteRule .* &#8211; [F]<\/p>\n<p>&#8222;`<\/p>\n<p>U\u017cytkownicy, kt\u00f3rym dost\u0119p zostaje odm\u00f3wiony, otrzymuj\u0105 kod b\u0142\u0119du 403.<\/p>\n<p>Blokowanie po nazwie bota dzia\u0142a na tej samej zasadzie, warunek sprawdza wtedy nag\u0142\u00f3wek User-Agent:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{HTTP_USER_AGENT} nazwa-bota [NC]<\/p>\n<p>RewriteRule .* &#8211; [F]<\/p>\n<p>&#8222;`<\/p>\n<p>Dawniej ta regu\u0142a s\u0142u\u017cy\u0142a g\u0142\u00f3wnie do odcinania bot\u00f3w kopiuj\u0105cych tre\u015b\u0107 i skaner\u00f3w podatno\u015bci. Dzi\u015b dochodzi do tego nowa kategoria: crawlery modeli j\u0119zykowych, takie jak GPTBot, ClaudeBot czy PerplexityBot, kt\u00f3re pobieraj\u0105 tre\u015b\u0107 strony na potrzeby odpowiedzi generowanych przez AI. Blokada po User-Agent w .htaccess technicznie dzia\u0142a te\u017c na nie, ale to metoda zawodna, bo nic nie zmusza bota do przedstawienia si\u0119 prawdziw\u0105 nazw\u0105. Standardowym i szerzej respektowanym sposobem zarz\u0105dzania dost\u0119pem crawler\u00f3w AI jest plik robots.txt, to w\u0142a\u015bnie ten plik odpytuj\u0105 w pierwszej kolejno\u015bci, zanim zaczn\u0105 pobiera\u0107 tre\u015b\u0107. .htaccess ma sens jako dodatkowa, twardsza bariera dla ruchu, kt\u00f3ry ju\u017c zignorowa\u0142 robots.txt albo nigdy nie mia\u0142 zamiaru go respektowa\u0107.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ochrona_haslem_i_zabezpieczenia_WordPressa_w_htaccess\"><\/span>Ochrona has\u0142em i zabezpieczenia WordPressa w .htaccess<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ochron\u0119 has\u0142em .htaccess realizuje przez plik towarzysz\u0105cy .htpasswd, w kt\u00f3rym login i zaszyfrowane has\u0142o s\u0105 trzymane osobno od kodu strony, a dost\u0119p do wybranego katalogu wymaga podania ich w oknie logowania przegl\u0105darki, zanim serwer w og\u00f3le wy\u015ble tre\u015b\u0107.<\/p>\n<p>&#8222;`<\/p>\n<p>&lt;Files wp-login.php&gt;<\/p>\n<p>Order Deny,Allow<\/p>\n<p>Deny from All<\/p>\n<p>Satisfy Any<\/p>\n<p>AuthName &quot;Dostep chroniony&quot;<\/p>\n<p>AuthUserFile \/sciezka\/do\/.htpasswd<\/p>\n<p>AuthType Basic<\/p>\n<p>Require valid-user<\/p>\n<p>&lt;\/Files&gt;<\/p>\n<p>&#8222;`<\/p>\n<p>Plik .htpasswd zawiera login i has\u0142o rozdzielone dwukropkiem, przy czym has\u0142o musi by\u0107 zaszyfrowane, nigdy zapisane jawnym tekstem. Dzi\u015b najprostszym i najbardziej aktualnym sposobem wygenerowania takiego wpisu jest polecenie htpasswd z pakietu narz\u0119dzi Apache, uruchamiane przez SSH, albo wbudowany generator w panelu hostingowym: cPanel, DirectAdmin i Plesk maj\u0105 gotow\u0105 opcj\u0119 &quot;Password Protect Directories&quot;.<\/p>\n<p>Popularna, wci\u0105\u017c aktualna para regu\u0142 chroni\u0105cych instalacj\u0119 WordPress:<\/p>\n<p>&#8222;`<\/p>\n<h2><span class=\"ez-toc-section\" id=\"blokada_bezposredniego_dostepu_do_pliku_konfiguracyjnego\"><\/span>blokada bezpo\u015bredniego dost\u0119pu do pliku konfiguracyjnego<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>&lt;Files wp-config.php&gt;<\/p>\n<p>Order allow,deny<\/p>\n<p>Deny from all<\/p>\n<p>&lt;\/Files&gt;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"blokada_wykonywania_plikow_PHP_w_katalogu_przesylania_mediow\"><\/span>blokada wykonywania plik\u00f3w PHP w katalogu przesy\u0142ania medi\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{REQUEST_URI} ^\/wp-content\/uploads\/.*\\.php$ [NC]<\/p>\n<p>RewriteRule .* &#8211; [F,L]<\/p>\n<p>&#8222;`<\/p>\n<p>Blokada wykonywania PHP w katalogu uploads jest jedn\u0105 z ta\u0144szych metod ochrony, bo folder przesy\u0142ania plik\u00f3w jest typowym celem atak\u00f3w umieszczaj\u0105cych z\u0142o\u015bliwy skrypt pod pozorem obrazka. Coroczne raporty o bezpiecze\u0144stwie WordPressa wskazuj\u0105, \u017ce zdecydowana wi\u0119kszo\u015b\u0107 atak\u00f3w wykorzystuje znane, nieza\u0142atane luki w popularnych wtyczkach, a nie b\u0142\u0119dy w samym rdzeniu CMS-a (<a href=\"https:\/\/patchstack.com\/whitepaper\/state-of-wordpress-security-in-2024\/\" target=\"_blank\" rel=\"noopener\">Patchstack<\/a>).<\/p>\n<p>Konsekwencja przej\u0119cia strony rzadko ko\u0144czy si\u0119 na samej stronie. Google potrafi oznaczy\u0107 zainfekowan\u0105 domen\u0119 ostrze\u017ceniem w wynikach wyszukiwania i w przegl\u0105darce (<a href=\"https:\/\/transparencyreport.google.com\/safe-browsing\/overview\" target=\"_blank\" rel=\"noopener\">Google Transparency Report<\/a>), co na czas czyszczenia i ponownego przegl\u0105du odcina ca\u0142y ruch organiczny. To bywa d\u0142u\u017csze i dro\u017csze ni\u017c samo wdro\u017cenie regu\u0142 zabezpieczaj\u0105cych na starcie.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Strona_bledu_404_ochrona_przed_hotlinkowaniem_i_cache_plikow_statycznych\"><\/span>Strona b\u0142\u0119du 404, ochrona przed hotlinkowaniem i cache plik\u00f3w statycznych<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>W\u0142asn\u0105 stron\u0119 b\u0142\u0119du 404 ustawia jedna linia (ErrorDocument), ochron\u0119 przed hotlinkowaniem obrazk\u00f3w blokada oparta o nag\u0142\u00f3wek odsy\u0142aj\u0105cy, a przyspieszenie \u0142adowania powt\u00f3rnych ods\u0142on nag\u0142\u00f3wek Cache-Control dla plik\u00f3w statycznych.<\/p>\n<p>&#8222;`<\/p>\n<p>ErrorDocument 404 \/404.html<\/p>\n<p>ErrorDocument 403 \/403.html<\/p>\n<p>&#8222;`<\/p>\n<p>W\u0142asna strona b\u0142\u0119du 404 zatrzymuje cz\u0119\u015b\u0107 odwiedzaj\u0105cych, kt\u00f3rzy trafili na nieistniej\u0105cy adres, czy to liter\u00f3wka, usuni\u0119ty produkt, czy stary link z innej strony, zamiast traci\u0107 ich od razu. Wystarczy umie\u015bci\u0107 na niej wyszukiwark\u0119 wewn\u0119trzn\u0105 i link do kilku g\u0142\u00f3wnych kategorii, \u017ceby cz\u0119\u015b\u0107 tego ruchu trafi\u0142a gdzie indziej w serwisie, zamiast si\u0119 odbi\u0107.<\/p>\n<p>Blokada hotlinkowania grafik:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteEngine On<\/p>\n<p>RewriteCond %{HTTP_REFERER} !^$<\/p>\n<p>RewriteCond %{HTTP_REFERER} !^https:\/\/(www\\.)?domena\\.pl\/.*$ [NC]<\/p>\n<p>RewriteRule \\.(jpg|jpeg|png|gif|webp)$ &#8211; [F]<\/p>\n<p>&#8222;`<\/p>\n<p>Regu\u0142a blokuje wy\u015bwietlanie plik\u00f3w graficznych na cudzych stronach przez bezpo\u015bredni adres do pliku na serwerze w\u0142a\u015bciciela, co poza kosztem transferu bywa te\u017c problemem praw autorskich do zdj\u0119\u0107.<\/p>\n<p>Cache dla plik\u00f3w statycznych:<\/p>\n<p>&#8222;`<\/p>\n<p>&lt;FilesMatch &quot;\\.(css|js|jpg|jpeg|png|gif|webp|svg|ico)$&quot;&gt;<\/p>\n<p>Header set Cache-Control &quot;max-age=2592000, public&quot;<\/p>\n<p>&lt;\/FilesMatch&gt;<\/p>\n<p>&#8222;`<\/p>\n<p>Nag\u0142\u00f3wek Cache-Control m\u00f3wi przegl\u0105darce, \u017ceby przy kolejnej wizycie nie pobiera\u0142a ponownie tych samych plik\u00f3w CSS, skrypt\u00f3w czy grafik, tylko skorzysta\u0142a z kopii zapisanej lokalnie. Ma to bezpo\u015bredni wp\u0142yw na czas wczytania strony przy powrocie u\u017cytkownika, a wi\u0119c i na wska\u017aniki szybko\u015bci typu Largest Contentful Paint, kt\u00f3re Google liczy do oceny jako\u015bci strony (<a href=\"https:\/\/web.dev\/articles\/lcp\" target=\"_blank\" rel=\"noopener\">web.dev<\/a>). Przy sklepie internetowym czy formularzu kontaktowym ka\u017cda dodatkowa sekunda \u0142adowania zwi\u0119ksza ryzyko, \u017ce odwiedzaj\u0105cy zamknie kart\u0119, zanim strona zd\u0105\u017cy si\u0119 w pe\u0142ni wy\u015bwietli\u0107.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Wyrazenia_regularne_w_htaccess_koncowki_html_parametry_przyjazne_adresy\"><\/span>Wyra\u017cenia regularne w .htaccess: ko\u0144c\u00f3wki .html, parametry, przyjazne adresy<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Wyra\u017cenia regularne pozwalaj\u0105 dopasowa\u0107 ca\u0142e wzorce adres\u00f3w zamiast pojedynczych, znanych z g\u00f3ry URL-i, wi\u0119c jedna regu\u0142a potrafi obs\u0142u\u017cy\u0107 tysi\u0105ce podstron naraz.<\/p>\n<p>Usuni\u0119cie ko\u0144c\u00f3wek .html z adres\u00f3w:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteCond %{THE_REQUEST} \\.html<\/p>\n<p>RewriteRule ^(.*)\\.html$ \/$1 [R=301,L]<\/p>\n<p>&#8222;`<\/p>\n<p>Przyjazne adresy zamiast parametr\u00f3w w URL:<\/p>\n<p>&#8222;`<\/p>\n<p>RewriteCond %{REQUEST_URI} ^\/kategoria\/ [NC]<\/p>\n<p>RewriteRule ^kategoria\/([0-9]+)\/?$ \/index.php?kategoria=$1 [L]<\/p>\n<p>&#8222;`<\/p>\n<p>Takie regu\u0142y s\u0105 typowe przy migracji sklepu ze starego systemu adres\u00f3w, z parametrami albo ko\u0144c\u00f3wkami .php czy .html, na czytelne, przyjazne adresy. Zmiana struktury adres\u00f3w ca\u0142ego serwisu bez kompletu przekierowa\u0144 301 ze starych wzorc\u00f3w na nowe kasuje histori\u0119 rankingow\u0105 setek podstron naraz. Przy wi\u0119kszych wdro\u017ceniach dobrze jest wcze\u015bniej wypisa\u0107 pe\u0142n\u0105 map\u0119 starych i nowych adres\u00f3w, zanim regu\u0142y trafi\u0105 na serwer produkcyjny.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Najczestsze_pytania_o_htaccess_i_przekierowania_301\"><\/span>Najcz\u0119stsze pytania o .htaccess i przekierowania 301<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Czym_rozni_sie_przekierowanie_301_od_302\"><\/span>Czym r\u00f3\u017cni si\u0119 przekierowanie 301 od 302?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>301 oznacza przekierowanie sta\u0142e i m\u00f3wi wyszukiwarce, \u017ce stary adres nie wr\u00f3ci, wi\u0119c jego warto\u015b\u0107 rankingowa ma trwale przej\u015b\u0107 na nowy URL. 302 to przekierowanie tymczasowe, po kt\u00f3rym wyszukiwarka nadal traktuje stary adres jako docelowy i nie przenosi na nowy pozycji ani ruchu. Kod 302 ma sens przy testach, promocjach czy stronie chwilowo wy\u0142\u0105czonej z ruchu, przy trwa\u0142ej zmianie adresu w\u0142a\u015bciwym wyborem jest 301.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Dlaczego_po_dodaniu_reguly_w_htaccess_strona_pokazuje_blad_500\"><\/span>Dlaczego po dodaniu regu\u0142y w .htaccess strona pokazuje b\u0142\u0105d 500?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Najcz\u0119stsz\u0105 przyczyn\u0105 jest liter\u00f3wka w sk\u0142adni, brakuj\u0105cy uko\u015bnik albo z\u0142a kolejno\u015b\u0107 flag, albo pr\u00f3ba u\u017cycia dyrektywy, kt\u00f3rej akurat ta konfiguracja serwera nie obs\u0142uguje. Drugi typowy pow\u00f3d to brak w\u0142\u0105czonego modu\u0142u FollowSymlinks, wymaganego przez cz\u0119\u015b\u0107 regu\u0142 opartych na blokadzie stron odsy\u0142aj\u0105cych. Najbezpieczniejszy spos\u00f3b namierzenia b\u0142\u0119du to cofni\u0119cie ostatnio dodanego fragmentu i wdra\u017canie kolejnych regu\u0142 pojedynczo, ze sprawdzeniem strony po ka\u017cdej zmianie.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Czy_plik_htaccess_dziala_na_kazdym_hostingu\"><\/span>Czy plik .htaccess dzia\u0142a na ka\u017cdym hostingu?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Nie, wy\u0142\u0105cznie na serwerach z Apache albo kompatybilnym LiteSpeed, na kt\u00f3rych stoi zdecydowana wi\u0119kszo\u015b\u0107 hostingu wsp\u00f3\u0142dzielonego w Polsce. Na Nginx plik .htaccess jest ca\u0142kowicie ignorowany, a te same regu\u0142y administrator przepisuje bezpo\u015brednio w konfiguracji serwera. Przed wdro\u017ceniem regu\u0142 dobrze sprawdzi\u0107 w panelu hostingowym albo u dostawcy, na jakim oprogramowaniu stoi serwer.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Czy_blednie_skonfigurowane_przekierowania_szkodza_widocznosci_w_Google\"><\/span>Czy b\u0142\u0119dnie skonfigurowane przekierowania szkodz\u0105 widoczno\u015bci w Google?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tak, najcz\u0119stszy problem to p\u0119tla przekierowa\u0144, gdy adres A prowadzi do B, a B z powrotem do A, albo zbyt d\u0142ugi \u0142a\u0144cuch kilku przekierowa\u0144 z rz\u0119du, kt\u00f3ry spowalnia wczytanie strony i utrudnia robotom dotarcie do finalnego adresu. R\u00f3wnie kosztowny bywa brak przekierowania 301 przy zmianie adresu, wtedy stary URL po prostu znika z wynik\u00f3w razem z wypracowan\u0105 przez lata pozycj\u0105, zamiast przekaza\u0107 j\u0105 dalej. Ka\u017cd\u0105 wi\u0119ksz\u0105 zmian\u0119 struktury adres\u00f3w dobrze sprawdzi\u0107 w Search Console kilka tygodni po wdro\u017ceniu, \u017ceby potwierdzi\u0107, \u017ce nowe adresy przej\u0119\u0142y ruch ze starych.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Czym_jest_RewriteCond_i_czym_rozni_sie_od_RewriteRule\"><\/span>Czym jest RewriteCond i czym r\u00f3\u017cni si\u0119 od RewriteRule?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>RewriteCond definiuje warunek, kt\u00f3ry musi by\u0107 spe\u0142niony, \u017ceby zadzia\u0142a\u0142a nast\u0119puj\u0105ca po nim regu\u0142a, na przyk\u0142ad konkretna domena w adresie albo brak szyfrowania. RewriteRule to sama komenda: adres, kt\u00f3ry ma zosta\u0107 dopasowany, i to, co ma si\u0119 z nim sta\u0107, czyli przekierowanie, blokada albo przepisanie na inny plik. Regu\u0142a bez warunku dzia\u0142a zawsze, gdy dopasuje adres, z warunkiem tylko wtedy, gdy oba elementy s\u0105 spe\u0142nione naraz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.htaccess to plik konfiguracyjny serwera Apache, kt\u00f3ry steruje ruchem na stronie, zanim uruchomi si\u0119 jakikolwiek skrypt. W praktyce najcz\u0119\u015bciej s\u0142u\u017cy do trzech rzeczy: przekierowania 301 ze starego adresu na nowy, wymuszenia jednej wersji domeny (HTTPS, z www lub bez) oraz blokowania niechcianego ruchu po adresie IP czy nazwie bota. Plik dzia\u0142a wy\u0142\u0105cznie na serwerach Apache [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":44752,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-6282","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wiedza-seo"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia - Blog NPROFIT<\/title>\n<meta name=\"description\" content=\"Czym jest .htaccess i jak zrobi\u0107 przekierowanie 301: gotowe regu\u0142y, wymuszenie HTTPS, blokada bot\u00f3w i tabela kod\u00f3w przekierowa\u0144.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia - Blog NPROFIT\" \/>\n<meta property=\"og:description\" content=\"Czym jest .htaccess i jak zrobi\u0107 przekierowanie 301: gotowe regu\u0142y, wymuszenie HTTPS, blokada bot\u00f3w i tabela kod\u00f3w przekierowa\u0144.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/\" \/>\n<meta property=\"og:site_name\" content=\"NPROFIT\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-14T11:04:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T09:40:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2018\/08\/wpis-6282.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kamil Rybicki\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kamil Rybicki\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/\"},\"author\":{\"name\":\"Kamil Rybicki\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#\\\/schema\\\/person\\\/92bf22c8ebd1c7b18dbf148defacd529\"},\"headline\":\"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia\",\"datePublished\":\"2018-08-14T11:04:03+00:00\",\"dateModified\":\"2026-07-31T09:40:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/\"},\"wordCount\":2669,\"publisher\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/wpis-6282.png\",\"articleSection\":[\"Wiedza SEO\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/\",\"url\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/\",\"name\":\"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia - Blog NPROFIT\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/wpis-6282.png\",\"datePublished\":\"2018-08-14T11:04:03+00:00\",\"dateModified\":\"2026-07-31T09:40:36+00:00\",\"description\":\"Czym jest .htaccess i jak zrobi\u0107 przekierowanie 301: gotowe regu\u0142y, wymuszenie HTTPS, blokada bot\u00f3w i tabela kod\u00f3w przekierowa\u0144.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#primaryimage\",\"url\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/wpis-6282.png\",\"contentUrl\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/wpis-6282.png\",\"width\":1200,\"height\":630,\"caption\":\"Kompendium wiedzy o .htaccess: przekierowania, zabezpieczenia, SSL, SEO\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/htaccess-seo\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#website\",\"url\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/\",\"name\":\"NPROFIT\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#organization\",\"name\":\"NPROFIT\",\"url\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/bigLogo.png\",\"contentUrl\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/bigLogo.png\",\"width\":323,\"height\":50,\"caption\":\"NPROFIT\"},\"image\":{\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/#\\\/schema\\\/person\\\/92bf22c8ebd1c7b18dbf148defacd529\",\"name\":\"Kamil Rybicki\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ee333759a7a67c04958b79fed2e66cdd446f429179aeef588293e00f5a67dd27?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ee333759a7a67c04958b79fed2e66cdd446f429179aeef588293e00f5a67dd27?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ee333759a7a67c04958b79fed2e66cdd446f429179aeef588293e00f5a67dd27?s=96&d=mm&r=g\",\"caption\":\"Kamil Rybicki\"},\"url\":\"https:\\\/\\\/nprofit.net\\\/pl\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia - Blog NPROFIT","description":"Czym jest .htaccess i jak zrobi\u0107 przekierowanie 301: gotowe regu\u0142y, wymuszenie HTTPS, blokada bot\u00f3w i tabela kod\u00f3w przekierowa\u0144.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/","og_locale":"pl_PL","og_type":"article","og_title":"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia - Blog NPROFIT","og_description":"Czym jest .htaccess i jak zrobi\u0107 przekierowanie 301: gotowe regu\u0142y, wymuszenie HTTPS, blokada bot\u00f3w i tabela kod\u00f3w przekierowa\u0144.","og_url":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/","og_site_name":"NPROFIT","article_published_time":"2018-08-14T11:04:03+00:00","article_modified_time":"2026-07-31T09:40:36+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2018\/08\/wpis-6282.png","type":"image\/png"}],"author":"Kamil Rybicki","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Kamil Rybicki","Szacowany czas czytania":"8 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#article","isPartOf":{"@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/"},"author":{"name":"Kamil Rybicki","@id":"https:\/\/nprofit.net\/pl\/#\/schema\/person\/92bf22c8ebd1c7b18dbf148defacd529"},"headline":"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia","datePublished":"2018-08-14T11:04:03+00:00","dateModified":"2026-07-31T09:40:36+00:00","mainEntityOfPage":{"@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/"},"wordCount":2669,"publisher":{"@id":"https:\/\/nprofit.net\/pl\/#organization"},"image":{"@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#primaryimage"},"thumbnailUrl":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2018\/08\/wpis-6282.png","articleSection":["Wiedza SEO"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/","url":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/","name":"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia - Blog NPROFIT","isPartOf":{"@id":"https:\/\/nprofit.net\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#primaryimage"},"image":{"@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#primaryimage"},"thumbnailUrl":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2018\/08\/wpis-6282.png","datePublished":"2018-08-14T11:04:03+00:00","dateModified":"2026-07-31T09:40:36+00:00","description":"Czym jest .htaccess i jak zrobi\u0107 przekierowanie 301: gotowe regu\u0142y, wymuszenie HTTPS, blokada bot\u00f3w i tabela kod\u00f3w przekierowa\u0144.","breadcrumb":{"@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#primaryimage","url":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2018\/08\/wpis-6282.png","contentUrl":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2018\/08\/wpis-6282.png","width":1200,"height":630,"caption":"Kompendium wiedzy o .htaccess: przekierowania, zabezpieczenia, SSL, SEO"},{"@type":"BreadcrumbList","@id":"https:\/\/nprofit.net\/pl\/blog\/htaccess-seo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/nprofit.net\/pl\/"},{"@type":"ListItem","position":2,"name":"Kompendium .htaccess: przekierowania 301, SSL, zabezpieczenia"}]},{"@type":"WebSite","@id":"https:\/\/nprofit.net\/pl\/#website","url":"https:\/\/nprofit.net\/pl\/","name":"NPROFIT","description":"","publisher":{"@id":"https:\/\/nprofit.net\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nprofit.net\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/nprofit.net\/pl\/#organization","name":"NPROFIT","url":"https:\/\/nprofit.net\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/nprofit.net\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2025\/07\/bigLogo.png","contentUrl":"https:\/\/nprofit.net\/pl\/wp-content\/uploads\/2025\/07\/bigLogo.png","width":323,"height":50,"caption":"NPROFIT"},"image":{"@id":"https:\/\/nprofit.net\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/nprofit.net\/pl\/#\/schema\/person\/92bf22c8ebd1c7b18dbf148defacd529","name":"Kamil Rybicki","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/ee333759a7a67c04958b79fed2e66cdd446f429179aeef588293e00f5a67dd27?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ee333759a7a67c04958b79fed2e66cdd446f429179aeef588293e00f5a67dd27?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ee333759a7a67c04958b79fed2e66cdd446f429179aeef588293e00f5a67dd27?s=96&d=mm&r=g","caption":"Kamil Rybicki"},"url":"https:\/\/nprofit.net\/pl\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/posts\/6282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/comments?post=6282"}],"version-history":[{"count":2,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/posts\/6282\/revisions"}],"predecessor-version":[{"id":44961,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/posts\/6282\/revisions\/44961"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/media\/44752"}],"wp:attachment":[{"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/media?parent=6282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/categories?post=6282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nprofit.net\/pl\/wp-json\/wp\/v2\/tags?post=6282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}