Pomimo iż istnieje zgodny z dobrymi praktykami sposób na ustawienie przerwy technicznej serwisu www, to w praktyce webmasterzy posługują się w tym celu różnymi metodami mniej lub bardzie eleganckimi i mniej lub bardziej technicznie odpowiednimi. Niektóre z tych metod mogą bardzo negatywnie wpłynąć, nie tylko na reputację serwisu wśród odwiedzających, ale także na pozycję stron w wyszukiwarkach.
A może tak mała przerwa techniczna? |
W przypadku konieczności ustawienia tymczasowej przerwy technicznej zdecydowanie odradzam wyłączać lub ograniczać funkcjonalność serwera www, ograniczać dostęp do serwisu za pomocą chronionych katalogów, reguł firewalla, bądź bezpośrednio wysyłając nagłówki z poziomu skryptów php za pomocą funkcji header(). Tego typu praktyki nie są przeważnie idealne dla przerwy technicznej, a mogą wręcz być przyczyną wielu negatywnych sytuacji.
W tym tutorialu przedstawię prosty i prawidłowy sposób ustawienia przerwy technicznej dla serwisu web obsługiwanym przez serwer Apache 2.x. Jest to sposób w pełni zgodny z dobrymi praktykami webmasterskimi.
W celu ustawienia przerwy technicznej w serwisie www w sposób omawiany w niniejszym artykule, muszą zostać spełnione następujące, wstępne warunki:
- załadowany i włączony moduł Apache mod_rewrite;
- włączona obsługa plików .htaccess dla katalogów serwisu
Moduł Apache mod_rewrite
Moduł Apache mod_rewrite (rewrite_module) umożliwia przekierowywania url, które w przypadku przerwy technicznej powinny kierować użytkownika na adres url, pod którym znajduje się dokument web informujący o tymczasowej sytuacji, w przypadku żądań HTTP dotyczących każdego innego adresu url, znajdującego się na domenie serwisu. Przed przejściem do dalszej części tego artykułu należy się upewnić, że moduł ten jest uruchomiony i działa prawidłowo. Można tego dokonać na kilka różnych sposobów. Najprostszym z nich może być, jeśli mamy dostęp do konsoli:
apachectl -M | grep rewrite_module
Innym prostym sposobem jest wywołanie polecenia php phpinfo() i sprawdzenie statusu modułu mod_rewrite w wyświetlanych wynikach skryptu.
Aby załadować moduł Apache mod_rewrite, jeśli nie jest jeszcze załadowany, należy dodać poniżej przedstawiony wiersz do pliku httpd.conf, lub do pliku /etc/httpd/conf.modules.d/, w zależności od dystrybucji systemu, po czym należy uruchomić ponownie serwer Apache:
LoadModule rewrite_module modules/mod_rewrite.so
Plik .htaccess
Plik .htaccess jest miejscem, w którym można ustawić wiele istotnych parametrów serwera www, które mają obowiązywać dla danego katalogu i ewentualnie jego podkatalogów, pod warunkiem, iż nie zawierają one kolejnych plików .htaccess z innymi ustawieniami, jeśli przetwarzanie plików .htaccess dla tych podkatalogów jest włączone. Aby ustawienia znajdujące się w tym pliku miały efekt, musi właśnie zostać włączona ich obsługa dla danego katalogu. Ustawień tych dokonujemy w głównym pliku konfiguracyjnym serwera Apache, czyli httpd.conf. Aby włączyć obsługę pliku .htaccess dla danego katalogu serwisu www, należy w sekcji <Directory> związanej z tym katalogiem dodać następujący wpis, jeśli jeszcze nie jest on tam obecny:
AllowOverride All
Przerwa techniczna: strona informująca o przerwie
Aby przekierowanie do dokumentu informującego o tymczasowej przerwie technicznej przyniosło efekt należy stworzyć dokument web z właściwą dla tej okoliczności informacją. Dla zgodności z niniejszym tutorialem, plik może mieć przykładową nazwę przerwaTechniczna.html i może znajdować się w głównym katalogu www serwera Apache, czyli lokalizacji określonej jako DocumentRoot w pliku konfiguracyjnym httpd.conf.
Przerwa techniczna: ustawienia .htaccess
Zakładając, że moduł mod_rewrite, o którym pisałem wcześniej, działa prawidłowo, a obsługa plików .htaccess jest włączona dla katalogów związanych z naszym serwisem, możemy teraz przystąpić do wprowadzenia odpowiednich, przykładowych wierszy „przerwy technicznej" do pliku .htaccess związanego z naszą witryną:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/przerwa-techniczna -f
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.1
RewriteCond %{REQUEST_URI} !przerwaTechniczna.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /przerwaTechniczna.html [R=302,L]
</IfModule>
Świetnie! Ale, co to wszystko oznacza?
W sekcji rozpoczynającej się od <IfModule mod_rewrite.c>, a kończącej na </IfModule> znajdują się dyrektywy serwera Apache, które są przetwarzane tylko w przypadku prawidłowo działającego modułu mod_rewrite, w celu uniknięcia błędów. Dyrektywa 'RewriteEngine on' włącza przekierowania url, a kolejne wiersze ustawień przekierowują użytkownika do dokumentu informującego o przerwie technicznej w przypadku żądań HTTP dotyczących każdego innego adresu url witryny. Warunkiem przekierowań jest obecność pliku o przykładowej nazwie przerwa-techniczna w głównym katalogu www, określonego jako 'DocumentRoot' w pliku httpd.conf. Przekierowanie jednak nie następuje w przypadku wywołania plików zawierających grafikę, bądź wywołania adresu url dokumentu informującego o przerwie (aby uniknąć nieskończonej pętli przekierowań). Dodatkowo, użytkownicy, którzy łączą się z witryną z adresu 192.168.0.1 (tutaj adres klasy 'C' - dla przykładu - ten adres można oczywiście dowolnie zmienić) nie zostają przekierowani do dokumentu informującego o przerwie technicznej, co oznacza, że mają pełen dostęp do treści serwisu. Dostęp do serwisu w trakcie przerwy technicznej może okazać się przydatny np. webmasterom.
Warto również zauważyć, że przekierowanie następuje z kodem HTTP Error 302 (moved temporarily), co stanowi cenną informację dla robotów indeksujących zawartość witryny. W przypadku prawidłowo ustawionej przerwy technicznej, klient żądający dostępu do przekierowywanych adresów uri, otrzymuje następującą, przykładową odpowiedź HTTP:
HTTP/1.1 302 FoundLocation: http://naszadomena/przerwaTechniczna.html
Ustawienia wstępne gotowe. Czas włączyć przerwę techniczną!
Po dokonanych ustawieniach wstępnych, aby włączyć przerwę techniczną, należy utworzyć plik, o przykładowej nazwie, zgodnej z nazwą obecną w regułach przekierowań w pliku .htaccess, która w naszym przykładzie brzmi 'przerwa-techniczna'. Dopóki plik ten będzie istniał we wskazanym katalogu, obowiązywała będzie przerwa techniczna, co oznacza, że odwiedzający będą przekierowywani do dokumentu web o niej informującym.
Podobnie, aby zakończyć przerwę techniczną i przywrócić pełną dostępność serwisu, wystarczy usunąć plik 'przerwa-techniczna' z katalogu.
Oczywiście nie ma sensu każdorazowo tworzyć i usuwać tego pliku ręcznie, gdyż można w tym celu przygotować bardzo prosty skrypt php, składający się z zaledwie kilku wierszy, który będzie wykonywał tą czynność za nas.
Powodzenia! W przypadku uwag lub wątpliwości bardzo proszę o komentarze. Będę starał się na nie odpowiadać tak szybko, jak tylko będzie to możliwe.
Korzystanie z sieci bez zakłóceń i przerw? Tylko jeśli korzystamy z solidnej usługi a takie oferuje wiele dostawców. Mogą to być firmy ogólnopolskie bądź te działające lokalnie, jak https://fiberlink.pl/ na terenie Małopolski. Przed wyborem oferty warto sobie porównać warunki, sprawdzić oferowaną prędkość i sposób przesyłania internetu. Najpopularniejsza opcja obecnie to światłowód.
OdpowiedzUsuń