Mod Rewrite - przyjazne linki url
Mod Rewrite to bardzo przydatny mechanizm, który może służyć w wielu różnych celach, jednak jedną z najważniejszych dla właściciela strony jest możliwość zamiany adresów z parametrami na ładniejsze, bardziej eleganckie i jak to by powiedział spec od SEO bardziej przyjazne dla wyszukiwarek.
W jaki sposób działa mod rewite? Pozwala on na zmianę adresów typu:
index.php?akcja=5&dzial=10&temat=bieg-na-100-metrow
na ładniejszy, np. bieg-na-100-metrow,5,10.html
Co nam to daje?
Oprócz względów estetycznych takie uproszczenie linku sprawia, że łatwiej jest tę podstronę zapamiętać, przesłać znajomemu a także jest ona bardziej przyjazna robotom wyszukiwarek takich np. jak Google.
W jaki sposób "zamontować" go do swojej strony?
- Przede wszystkim musimy sprawdzić, czy serwer daje możliwość uruchomienia mod rewrite,
- następnie utworzyć na serwerze w katalogu, gdzie jest bezpośrednio strona plik .htaccess a w nim musimy wpisać odpowiednią formułkę, która zidentyfikuje zmienne i przekaże wartości tam do strony, by wyświetlone było to co ma być.
- przerobić swoją stronę, by wszędzie (tzn. np. tam gdzie jest menu) gdzie są wyświetlane linki były one zamieniane na nowy format, czyli np. tresc-arytkulu,numer_dzialu.html - w praktyce wspominane powyżej bieg-na-100-metrow,5,10.html. W PHP może to być np.:
echo '<a href="'.$tytul_artykulu.','.$akcja.','
.$temat.'">.$tytul.'</a>';
Oczywiście zmienną $tytul_artykulu uzyskujemy poprzez zamianę spacji, oraz wszystkich innych znakow z prawdziwego tytulu, czyli zmiennej $tytul.
Jak sprawdzić, czy serwer obsługuje mod rewrite? Przykład
By nieco bardziej wyjaśnić temat podam plik htaccess działający na np. serwerze Linuxpl:
RewriteBase /
Rewrite Engine ON
RewriteRule ^([A-Za-z0-9-]*).html index.php?akcja=$1
Zapisujemy go w katalogu głównym obok pliku index.php, którego zawartość może być taka:
<a href="akcja-zawiera-ten-tekst.html">kliknij na tym linku i zobacz
na adres url swojej strony oraz porównaj go
z poniższym:< />a><br><br>
<?
echo "Zmienna akcja zawiera: ".$_GET['akcja'];
?>
<br><br>Zmień w adresie przeglądarki z "akcja-zawiera-ten-tekst.html" na inny np. "akcja-zawiera.html" i zobacz jak zmienia się powyższa
zmienna! Jeśli tak to mod Rewrite działa prawidłowo!
Ustawienia dla Webserv:
Dla serwera lokalnego np. webserv musimy zmienić w RewriteBase znaczek / na odpowiedni adres np.
RewriteBase /~joomla/
Oczywiście jeśli instalujemy na serwerze naszą stronę z Mod Rewritem wówczas również wpiszemy RewriteBase /podkatalog/
Za pomocą RewriteRule ustalamy reguły, które tłumaczą, gdzie są zakodowane poszczególne zmienne a adresie url, by dotarły one w odpowiednie miejsca w skrypcie.