Na WebInsider.pl korzystamy z motywu Extra od Elegant Themes. Zobacz dlaczego...

O pliku .htaccess już kilkukrotnie pisałem, bo ten- mogłoby się wydawać – niepozorny plik kryje wielkie możliwości.

W tym wpisie postaram się przedstawić kilka przykładów (scenariuszy) wykorzystania pliku .htaccess do przekierowania ruchu z jednej strony na inna, z jednego adresu na inny.

Apache2 i .htaccess

Jeśli korzystacie z hostingu współdzielonego to najprawdopodobniej serwer to Apache2, i pewnie macie aktywna obsługę plików .htaccess, a tym samym wszystko powinno działać zaraz po zakupie/aktywacji konta.

Jeśli korzystacie z własnego serwera może być konieczna aktywacja obsługi plików .htaccess – oczywiście jeśli jako oprogramowanie serwera wybraliście Apache2, a nie np. Enginx – gdzie nie ma obsługi plików .htaccess, choć są różne metody na obejście tego problemu…

Więcej o tym pisałem tutaj (konfiguracja serwera WWW), więc tylko w skrócie:

sudo a2enmod rewrite
sudo service apache2 restart

Przekierowanie za pomocą .htaccess

Oprócz przedstawienia podstawowych poleceń/komend/wpisów postaram się też oprzeć na  krótkich scenariuszach zadaniowych – czyli najpierw określamy cel a następnie działamy.

Mam nadzieję, że takie podejście do tego tematu będzie bardziej zrozumiałe niż „suchy tekst”.

ifModule

Jeszcze mała uwaga – w przykładach będę pomijał „ifModule” by nie komplikować przykładów. Nie jest to wymagane, ale powiedzmy, że dla zasady warto stosować.

Dlatego możecie podane przykłady (a przynajmniej większość) obudować wg wzoru:

<ifModule mod_rewrite.c>
 [KOD Z PRZYKŁADU]
</ifModule>

R=301, R=302, R=307

W przykładach będą się też pojawiać 3 kody przekierowań:

  • R=301 – przekierowanie trwałe/stałe
  • R=302 – przekierowanie tymczasowe
  • R=307 – przerwa techniczna

Przekierowanie www.domena na domena

Chyba najczęściej prze zemnie wykorzystywane przekierowanie, które kieruje cały ruch bezpośrednio na domenę, z pominięciem „subdomeny” www:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.webinsider.pl$
RewriteRule ^/?$ "http\:\/\/webinsider\.pl" [R=301,L]

Ten kod spowoduje przekierowanie każdego zapytania w postaci:

www.webinsider.pl/cokolwiek

na:

webinsider.pl/cokolwiek

Przekierowanie całego ruchu na inną domenę

By przekierować cały ruch z jednej domeny na inną – np. po zmianie adresu strony – wystarczy skorzystać z:

RewriteEngine On
RewriteRule ^(.*)$ http://nasza-nowa-domena.pl/$1 [R=301,L]

Przekierowanie pojedynczego adresu URL

Możemy też przekierować pojedynczy adres URL:

Redirect 301 /stary-adres-url.htm http://jakaś-domena.pl/nowy-adres-url.htm

A w raz z tym rodzajem przekierowania warto napisać o:

Przekierowanie „po slashu” (/)

Możemy ustawić przekierowanie „po slashu” dla naszej domeny:

Redirect 301 /poczta https://jakiś-serwer-pocztowy.pl/panel-poczty

Spowoduje to, że po wpisaniu adresu:

http://jakaś-nasza-domena.pl/poczta

zostaniemy przekierowani na stronę:

https://jakiś-serwer-pocztowy.pl/panel-poczty

Przekierowanie/zmiana typu pliku

RedirectMatch 301 (.*)\.html$ http://jakaś-nasza-domena.pl$1.php

I tym sposobem każde odwołanie do pliku HTML zostanie automatycznie zmienione na odwołanie do pliku PHP.

Podstawowe przykłady za nami, teraz kilka troszkę bardziej „skomplikowanych” scenariuszy:

Kilka domen, jeden katalog Apache2 – jedna główna domena

Załóżmy, że mamy kilka domena:

  • nazwa-naszej-firmy.pl
  • nazwa-naszej-firmy.com.pl
  • nazwa-naszej-firmy.eu

I wszystkie 3 domeny kierują do tego samego katalogu na naszym serwerze (Apache2), i tym samym wyświetlają tą samą stronę/zawartość, choć pod różnymi domenami.

I pewnie by tak mogło być, ale powiedzmy, że w ramach działań SEO (związanych z pozycjonowaniem strony) zapada decyzja by wszystkie domeny kierowały na główna, a przy okazji nie chcemy generować błędów 404 (nie znaleziono strony) jak ktoś skorzysta z linka do produktu/strony z jedną z alternatywnych domen.

W tym celu korzystamy z wpisu:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^nazwa-naszej-firmy.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.nazwa-naszej-firmy.com$ [OR]
RewriteCond %{HTTP_HOST} ^nazwa-naszej-firmy.com.pl$ [OR]
RewriteCond %{HTTP_HOST} ^www.nazwa-naszej-firmy.com.pl$ [OR]
RewriteCond %{HTTP_HOST} ^nazwa-naszej-firmy.eu$ [OR]
RewriteCond %{HTTP_HOST} ^www.nazwa-naszej-firmy.eu$ [OR]
RewriteCond %{HTTP_HOST} ^www.nazwa-naszej-firmy.pl$
RewriteRule (.*)$ http://nazwa-naszej-firmy.pl/$1 [R=301,L]

Tym sposobem wszystkie adresy z domen innych niż .pl zostaną skierowane na nazwa-naszej-firmy.pl, a przy okazji kierujemy ruch z www.nazwa-naszej-firmy.pl na nazwa-naszej-firmy.pl, więc mamy takie 2w1.

Przerwa techniczna

Kolejny scenariusz to przerwa techniczna – chcemy wykonać kilka operacji (mniejszych lub większych ;-)) na stronie, będziemy pracować z konkretnych adresów IP… Pozostałych odwiedzających przekierujemy na przygotowaną w tym celu stronę informacyjna („Przepraszamy, przerwa techniczna. Zapraszamy o…”)

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REQUEST_URI} !^/przerwa-techniczna\.html$
RewriteRule ^(.*)$ http://jakaś-nasza-domena.pl/przerwa-techniczna.html [R=307,L]

Korzystamy tu z kilku „trików”:

Wykluczamy nasz adres IP z przekierowania, dzięki czemu sami będziemy mieli pełny dostęp do strony:

RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123

Zamiast 123\.123\.123\.123 wstawcie swój adres IP. Można wykluczyć kilka adresów kopiując (zwielokrotniając) tą linijkę dla każdego adresu IP.

Kolejny ważna linijka to:

RewriteCond %{REQUEST_URI} !^/przerwa-techniczna\.html$

Dzięki niej unikniemy pętli, czyli przekierowania po przekierowaniu… Dotyczy to przekierowania w ramach tej samej domeny/serwera.

Pracujemy nad nową wersją strony, a inni widzą starą wersję

Kolejny scenariusz – i zarazem jeden z powodów powstania tego wpisu – to sytuacja gdy mamy jakąś stronę, ale chcemy w sposób przezroczysty dla użytkowników przygotować nową stronę.

Dla jednego z klientów przygotowuje kilka stron internetowych – część jest nowa, więc wystarczy blokada .htaccess lub przekierowanie na „zaślepkę” (podobnie jak w opisywanej powyżej sytuacji dotyczącej przerwy technicznej).

Tam gdzie strona już działa – sprawa komplikuje się trochę bardziej, bo chcemy przez te „kilka dni” jeszcze utrzymać starą stronę aktywną, gdy w tym czasie szykujemy nową.

Oczywiście można by tu skorzystać ze środowiska testowego, czy subdomeny – ale uznajmy, że środowisko testowe to jednak środowisko testowe, i często po migracji do środowiska produkcyjnego coś będzie nie tak… A subdomena – niby może być w tym samym środowisku, ale po co komplikować sobie później życie… ;-)

Stara strona trafiła do katalogu „old” (oczywiście „old” to tylko nazwa katalogu na potrzeby tego wpisu), a w katalogu głównym powstaje w tym czasie nowa…

A całość – w sposób przezroczysty dla użytkowników – załatwia taki wpis w .htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REQUEST_URI} !^/old/
RewriteRule ^(.*)$ /old/$1 [R=302,L]

Jak w sytuacji powyżej – tak i tym razem zamiast „123\.123\.123\.123” należy wstawić swój adres (lub adresy) IP, dzięki czemu sami nie będziemy przekierowywani… Do tego wykluczamy „pętle” dla już przekierowanych.

A gdy nowa strona będzie już gotowa – wystarczy usunąć te kilka linijek z .htaccess i po sprawie.

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!
Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.
Młody Szymon dzięki motywowi Divi od Elegant Themes zrobił stronę dla firmy ojca
WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Młody Szymon powiedział tacie o promocji dla czytelników WebInsider.pl i zaoszczędzili 80% na księgowości internetowej wFirma