Przenieś do nas swoje domeny i oszczędzaj na ich utrzymaniu!

mod_rewrite - mod rewrite, krótkie adresy URL

mod_rewrite jest modułem serwera Apache pozwalającym na przekierowywanie adresów URL.

W praktyce oznacza to, że nasz skomplikowany do zapamiętania adres w postaci:

http://www.example.com/index.php?id=827&option=artykul
można zamienić na przykład na:

http://www.example.com/artykul-827
http://www.example.com/artykul_827
http://www.example.com/827,artykul
http://www.example.com/artykul/827
Przepisywania można użyć dla dowolnych plików na serwerze ( HTML, PHP, JPG, GIF, PNG, ZIP itp. ).


Po co przepisywać adresy?

Przekierowywanie adresów pozwala chociażby łatwiej zarządzać danymi. Dzięki temu modułowi możesz stworzyć dowolną liczbę podstron w serwisie mimo, że podane pliki

Jak sprawdzić czy serwer obsługuje mod_rewrite?

Obecnie moduł "mod_rewrite" jest już standardem w ustawieniach serwerów WWW w firmach hostingowych, ale możesz w łatwy sposób sprawdzić jego dostępność.
Wgraj na serwer dowolny plik PHP z podanym poniżej kodem i wywołaj go w swojej przeglądarce:

<?php
phpinfo
();
?>
Jako rezultat otrzymasz listę informacji na temat konfiguracji serwera WWW.
Odszukaj sekcję "Loaded Modules" - to właśnie tutaj powinna znajdować się informacja o module "mod_rewrite". Jeżeli takiej informacji nie ma, to skontaktuje się ze swoim dostawcą hostingowym i zapytaj czy moduł jest dostępny

Wszystkie serwery w firmie WebHost.pl obsługują mod_rewrite.

Od czego zacząć

Żeby przekierowania działały prawidłowo, należy najpierw uruchomić nasz moduł. W tym celu utwórz plik .htaccess i dodaj w nim następującą instrukcję:

Options FollowSymLinks
RewriteEngine On
Czas utworzyć pierwsze przekierowanie. Utwórz na swoim serwerze plik index.php wyświetlający dowolną informację. Upewnij się również, że na serwerze nie istnieje plik index.html.
Do utworzonego już pliku .htaccess dodaj poniższy kod:

RewriteRule ^index.html$ index.php [L]
W tej chwili po wpisaniu adresu www.example.com/index.html wyświetli się zawartość pliku index.php - magia;)

Znaki ^ oraz $ stanowią część wyrażenia regularnego oznaczającego początek oraz koniec szukanego ciągu. Naszego zapytania nie spełnią zatem na przykład adresy index.htm czy indeex.html.

Składnia


RewriteRule wzorzec adres_docelowy [flagi]
wzorzec - oparty jest o wyrażenia regularne i przeszukuje jedynie URL-Path. Oznacza to, że nie jest uwzględniana domena oraz "Query String".
Poniżej przykład przeszukiwanej ścieżki:

http://www.example.com/adres-pliku,827.html
http://www.example.com/moj/katalog/plik.html
http://www.example.com/article,827?id=76&code=read
http://www.example.com/index.php?id=76&code=read
adres_docelowy - definiuje plik na serwerze, do którego będą przekazywane zapytania. W adresie docelowym można definiować zmienne. Przykład:

index.php?id=$1&adres=$2
katalog/router.php?cmd=$3&zmienna=$1
flagi - stanowią dodatkową dyrektywę pozwalającą określić w jaki sposób traktowana jest dana reguła ( jest to opcjonalne ).

[L] - (last) jeżeli reguła dopasuje wzorzec, to nie sprawdza już kolejnych reguł.
[NC] - (nocase) reguła nie zwraca uwagi na wielkość znaków.
[R=kod] - (redirect) powoduje przekierowanie adresu wraz z kodem stanu. Standardowo wysyłany jest kod 302 (Moved Temporarily).
[F] - (forbidden) zwraca kod stanu 403 i do adresu takiego nie ma dostępu.
[N] - (next) rozpoczyna ponownie przeszukiwanie reguł, lecz tym razem używa już jako wzorca przezpisanego adresu przez wszystkie wywołane reguły.

Powyższe znaczniki można ze sobą łączyć:

RewriteRule ^([A-z]*)$ index.php?id=$1 [L,NC,R=301]

Wyrażenia regularne

Instrukcja "RewriteRule" może zawierać wyrażenia regularne dzięki czemu możliwe jest przekierowywanie wielu adresów w jednej komendzie.
Załóżmy, że nasza strona posiada kilka podstron: strona główna, cennik, oferta, produkty, dojazd oraz kontakt i chcemy wszystkie treści wyświetlać za pomocą pliku index.php. Potrzebujemy zatem przekierować te podstrony do jednego pliku. Można to zrobić na dwa sposoby:

RewriteRule ^(strona-glowna|cennik|oferta|produkty|dojazd|kontakt)$ index.php?id=$1 [L]
RewriteRule ^([A-z]*)$ index.php?id=$1 [L]
Oba sposoby zadziałają dla zadanych podstron. Drugi sposób będzie mógł jednak przekierować wszystkie linki składające się z dowolnych liter ( np. www.example.com/ipsum czy www.example.com/dowolneznaki ). Trzeba zatem uwzględnić w kodzie strony sprawdzanie przekazywanych parametrów. Pierwszy sposób przekieruje natomiast tylko zdefiniowane adresy.

W powyższym przykładzie podane wartości przekazujemy do pliku index.php za pomocą zmiennej "id" i możemy się do niej odwołać za pomocą zmiennej globalnej $_GET, np:

<?php
echo $_GET['id'];
?>

Przykład

Najlepiej zrozumieć działanie na przykładzie.

Kod dla pliku .htaccess:

Options FollowSymLinks
RewriteEngine On 

RewriteRule ^przykladowa-strona.html$ index.php?id=example [L]

RewriteRule ^artykul-([0-9]*),wyswietl$ index.php?id=artykul&article=$1 [L]

RewriteRule ^pokaz,([A-z0-9]*)-(.*)$ index.php?id=many&first=$1&second=$2 [L]
Kod dla pliku index.php:

<?php

switch($_GET['id']) {
  case 
'example':
     echo 
'To jest przykład!';
  break;

  case 
'artykul':
     echo 
'Wyświetlam artykuł numer '$_GET['article'];
  break;

  case 
'many':
     echo 
'Pokaż stronę '$_GET['first'] .' z funkcją '$_GET['second'];
  break;

  default:
     echo 
'Nie znaleziono podanej strony';
  break;
}

?>

Przykładowe linki do skryptu na naszym serwerze (zawiera podany powyżej kod):

http://www.webhost.pl/kursy/mod_rewrite/przykladowa-strona.html

http://www.webhost.pl/kursy/mod_rewrite/artykul-666,wyswietl

http://www.webhost.pl/kursy/mod_rewrite/pokaz,dojazd-usun
Akceptujemy płatności: Płatności elektroniczne