Saturday 17 June 2006

Permanent redirect

Na pewno zdarzyło Ci się kiedyś trafić na stronę z informacją w rodzaju "serwis dostępny teraz pod nowym adresem". Nierzadko data w stopce wskazuje, że przeprowadzka odbyła się już parę lat temu - a użytkownicy (znaczy - Ty) nadal trafiają pod stary adres. Traci też właściciel strony - nie dość, że musi nadal utrzymywać starą domenę strony (aby przekazać użytkownikom informację), to jeszcze wyszukiwarki wyżej oceniają starszy adres, pod niego kierując użytkowników. Nie byłoby wygodniej, gdyby użytkownicy automatycznie trafiali na nową stronę, a wyszukiwarki nie pokazywały już odnośników do starej?


Z pomocą przychodzi kod HTTP Permanent Redirect (301). Najprostsze rozwiązanie, jeśli cały serwis zmienił adres, to wpis w pliku .htaccess:


Options +FollowSymlinks
RewriteBase /
RewriteEngine On
RewriteRule ^.* http://nowy.adres.com%1 [R=permanent,L]

Powyższa regułka włącza mod_rewrite (RewriteEngine On), łapie wszystkie odwołania do strony (^.* - wyrażenie regularne), a następnie przekierowuje je ([R=permanent])na nową domenę, zachowując treść dopasowaną do wyrażenia regularnego (%1). Opcja L oznacza, że serwer ma na tej regule poprzestać zakończyć przetwarzanie pliku .htaccess. mod_rewrite pozwala na złożone przekształcenia adresu, co można wykorzystać, gdy zmieniła się struktura strony. Niestety, nie na wszystkich serwerach jest dostępny. W samym pliku .htaccess przekierowanie można też uzyskać poprzez


Redirect permanent /tutaj/byl/jakis.plik http://nowy.adres.com/jest.tutaj

natomiast w pliku php działanie przekierowania 301 można generować następującym kodem:


<?php
$var_array = explode("/",$_SERVER['REQUEST_URI']);
//print_r($var_array);
$target=$var_array[1];
$url="http://nowy.adres.com/".$target;
header("HTTP/1.1 301 Moved Permanently");
header ( "Location: $url" );
?>
<p>Strona została przeniesiona. Nowy adres:</p>
<a href="<?php echo $url; ?>"><?php echo $url; ?></a>

przy czym samo parsowanie $target trzeba dopasować do swoich potrzeb. Trzeba też pamiętać, że aby header zostało przyjęte przez przeglądarkę, serwer nie może wcześniej wysłać żadnej treści - jeśli np. przed początkiem skryptu w pliku będzie pusta linia, albo chociaż spacja, to przekierowanie nie zadziała.


Przepisywanie adresów za pomocą skryptu php sprawdza się najlepiej, gdy zmieniła się struktura strony - najłatwiej za ich pomocą poprawić adresy wymagające uaktualnienia. A w jaki sposób przekonać Apacha do obsługiwania żądań przy użyciu skryptu? Jeśli interesuje nas przepisywanie adresów z jakiegoś podfolderu, to wystarczy wykorzystać fakt, że Apache, gdy nie znajdzie żądanego adresu, zaczyna przesuwać się w górę wirtualnego drzewa plików, aż trafi na plik potrafiący obsłużyć żądanie. Np. dla http://domena.info/koza/little/beast najpierw zostanie sprawdzone koza/little/beast, potem koza/little, a na końcu koza. Wystarczy poinformować serwer, że koza jest skryptem php poprzez dodanie w .htaccess:


<Files koza>
ForceType application/x-httpd-php
</Files

Globalną obsługę żądań przez skrypt można ustawić za pomocą mod_rewrite:


RewriteRule ^.* rewriter.php [L]

dopasowując według potrzeb wyrażenie regularne.


Jak wyszukiwarki reagują na Permanent Redirect? Z mojego doświadczenia wynika, że po 2 tygodniach nowy adres traktowany jest jako równorzędny staremu, a po 4 tygodniach przejmuje już w całości jego Page Rank (stary adres nie pojawia się więcej w wynikach). Jeśli nie chcesz frustrować użytkowników, pamiętaj też, by uaktualnić linki przychodzące z innych stron - dopóki przekierowanie będzie działać, użytkownicy trafią na stronę, ale jeśli nie planujesz płacić za starą domenę w nieskończoność, wypadało by zupełnie usunąć z sieci odwołania do niej. Linki wchodzące można sprawdzić w logach serwera / statystykach (referer) lub poprzez wyszukiwarki. Tutaj niestety google kłamie bezczelnie, podając tylko małą część znanych mu linków, na szczęście Yahoo (linkdomain:domainname.com albo linksite:domainname.com) oraz MSN (link:domainname.com) zwracają pełną listę (z dokładniejszymi wynikami w Yahoo). Zostaje już tylko skontaktować się z adminem każdej z linkujących stron...

Dlatego lubię plusa

emerge -e world && echo "emerge -e world finished" | mail 48663280xxx@text.plusgsm.pl || echo "emerge failed" | mail 48663280xxx@text.plusgsm.pl

Friday 2 June 2006

Palcówka

Porządne palcowanie wcale nie jest proste. Każdy, nawet najbardziej początkujący, jakoś sobie z nim radzi, ale jednak co profesjonalista to profesjonalista. Wielokrotnie obiecywałem sobie sumienną naukę - czasem nawet zaczynałem jakieś ćwiczenia, ale wiadomo, jak to jest - zaczyna się zgodnie z rozkładem, a potem nas ponosi i zaczyna się działać jak popadnie, byleby szybko był efekt. Faceci generalnie radzą sobie lepiej, ale to po prostu kwestia częstszych prób. Podobno nauka poprawnego palcowania jest nawet w programie liceum - niestety, mało który nauczyciel przeprowadza ten punkt programu. Większość puszcza uczniów na żywioł i tyle - dadzą sobie radę sami. A takie palcowanie z przypadku, szczególnie, gdy skupia się uwagę na wskazówkach wizualnych, jest nie do porównania z profesjonalnym - jest dużo wolniejsze, a przy tym dużo bardziej męczące.


Biorąc to wszystko pod uwagę, wziąłem się w końcu do roboty i sporządziłem sobie widoczny poniżej przyrząd do nauki palcowania. Wystarczyło trochę farbek modelarskich do zaznaczenia prawidłowego ułożenia palców. Malowanie dało jeszcze dodatkowy bonus - zakryte zostały różnorakie elementy rozpraszające normalnie uwagę.


Przyrząd do ćwiczenia palcowania