+
.htaccess i jego uroki
{ 05.03.2007, 11:12 }
Tagi: .htaccess, mod-rewrite, przekierowania url
Przekierowanie URL/przepisywania adresu w pewnym momencie stają się w webmasteringu wręcz koniecznym elementem, bo adresy w rodzaju http://strona.pl/?id=cos&op=costam&add=1,34&uasd=344535 są po prostu brzydkie i niepraktyczne – a to ciężko podać taki link znajomemu, a to wyszukiwarki mogą mieć problemy z zaindeksowaniem strony.
Można użyć metody PATH_INFO bądź mod_rewrite. Ta pierwsza jednak jest niewygodna w użyciu, gdyż wymaga edycji poza linkami w naszych skryptach także odczytywania wszystkich wartości… Jeśli nie mamy dostępu do pliku .htaccess, to jedyne wyjście – ja jednak nie będę się o nim rozpisywał (polecam art na php.pl na w/w temat). Bo jeśli mamy – cieszymy się jego dobrodziejstwem.
Pracę nad plikiem .htaccess zaczynamy… tworząc pusty plik o tej nazwie w katalogu, w którym ma działać nasza strona z przekierowaniami. Nasz kod będzie działał w obrębie foldera i wszystkich jego podfolderów, ale do każdego z nich możemy wstawić kolejne .htaccess’y, którymi zmienimy ustawienia tylko dla nich samych.
Okej, utworzyliśmy plik, co dalej? Oczywiście powinniśmy wstawić do niego odpowiednią treść. Załóżmy że linki w naszej stronie wyglądają tak: http://strona.pl/?id=cos&wrt=wartosc . Przepiszemy je, by działały ładnie- np http://strona.pl/cos/wrt.
RewriteEngine On
RewriteRule ^/([0-9]+)/([a-z0-9]+)$ index.php/?id=$1&wrt=$2
Może się to wydawać straszne, ale to nic trudnego. Pierwszym poleceniem informujemy serwer, że zamierzamy używać mod_rewrite. Następnym wykonujemy właściwą podmianę – sprawiamy że, adres wprowadzony w postaci /cos/wrt będzie oznaczał dla skryptu to samo, co nasze index.php/?id=cos&wrt=wartosc. Znak “^” rozpoczyna naszą wartość, “$” zaś kończy. Ciąg “[0-9]+” oznacza, że argument obsługuje liczby, zaś ” [a-z0-9]+” małe litery i liczby. Jeśli chcemy dodać jeszcze np obsługę wielkich liter, po prostu wstawiamy “[a-zA-Z0-9]+”.
Można oczywiście tworzyć inne linki, jeśli nie chcemy tak podmieniać całego kodu, np:
RewriteEngine On
RewriteRule ^akcja/(.*)$ index.php?id=akcja&op=$1
Takie zastosowanie jest o tyle lepsze, że nie zmienia na sztywno wszystkich wpisywanych w przeglądarce adresów i pobiera tylko jeden argument (“(.*)” – czyli wszystko), dzięki czemu nie będzie problemów z uznaniem znaku “/” za część wartości, co się czasem zdarza.
Uwaga – pamiętajmy, że mod_rewrite nie myślą i trzeba im pomóc. Powyższy kod zamieni linki na akcja/op – jeśli chcemy by działało także akcja/op/ , musimy dopisać linijkę:
RewriteRule ^akcja/(.*)/$ index.php?id=akcja&op=$1
Ciekawostką jest, że mod_rewrite nie karze nam używać slashy (“/”) jako przerywników – równie dobrze mogą to być przecinki itp znaczki. Tylko wówczas powraca nam problem błędnego indeksowania przez wyszukiwarki, więc odradzam odejście od “klasycznych” linków.
Mod_rewrite to chyba najużyteczniejsza z funkcji pliku .htaccess, ale nie jedyna. W pliku typ dopisujemy takie rzeczy, jak ustawienia plików błędów:
ErrorDocument 400 /400.php
ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
i inne rodzaje przekierowań:
Redirect 302 /art http://innastrona.pl/
Czyli proste przepisanie -> wpisanie adresu http://strona.pl/art przeniesie nas na http://innastrona.pl. Wyróżniamy dwa rodzaje takich przekierowań – 301 i 302 – a różnią się one:
301 Moved Permanently
Trwale przeniesiony – żądany zasób zmienił swój URI i w przyszłości zasób powinien być szukany pod wskazanym nowym adresem.
302 Moved Temporarily Found
Strona przeniesiona czasowo znaleziono – żądany zasób jest chwilowo dostępny pod innym adresem a przyszłe odwołania do zasobu powinny być kierowane pod adres pierwotny.
Za pomocą .htaccess możemy jeszcze ustawiać znacznie większą ilość funkcji – jak blokowanie/udzielanie dostępu dla konkretnych IP i wiele, wiele innych. Polecam samodzielnie poszukać materiałów, a zacząć można od tutorialu na home.pl.
PS: Niniejszym uroczyście otwieram nową kategorię na dRaiser’s helloworld – Webmastering :).





Stało się – i ja dołączyłem do testów platformy reklamowej przeznaczonej dla blogów i małych serwisów, czyli