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
http://www.example.com/artykul-827
http://www.example.com/artykul_827
http://www.example.com/827,artykul
http://www.example.com/artykul/827
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 plikiJak 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();
?>
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
Do utworzonego już pliku .htaccess dodaj poniższy kod:
RewriteRule ^index.html$ index.php [L]
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]
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
index.php?id=$1&adres=$2
katalog/router.php?cmd=$3&zmienna=$1
[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.
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]
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]
<?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;
}
?>
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
| Oferta | Hosting | Domeny | Pomoc | Ostatnio dodane | Kontakt |
|---|---|---|---|---|---|
|
Akceptujemy płatności: 


