[.htaccess] PHP i ładne linki

Mariusz Siwko
21.08.2015

Pisząc aplikację w PHP używamy odbierania danych z adresu metodą GET. Wyszukiwarki internetowe "nie przepadają" za linkami typu http://mojastronka.pl/artykul.php?kat=news&id=1 no i trudniej je zapamiętać. Z pomocą przychodzi nam .htaccess, w którym możemy wprowadzać reguły przepisywania linków. Np. :

Nasz nieładny link:
http://mojastronka.pl/artykul.php?kat=news&id=1&czytaj=wszystko

Możemy zamienić na:
http://mojastronka.pl/artykul/news/1/
lub:
http://mojastronka.plartykul-news-1.html
Nie musimy tworzyć żadnych katalogów ani plików .html, .htaccess "oszuka" nasz skrypt i wprowadzi mu odpowiednie dane. W tym celu tworzymy regułę w pliku .htaccess:

Zajmiemy się przykładem: http://mojastronka.pl/artykul-news-1.html

 

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mojastronka.pl$ [NC]
RewriteRule ^artykul-([a-z0-9._]+)-([^-]+).html$ artykul.php?kat=$1&id=$2 [L]

 

W pierwszej linijce aktywujemy silnik MOD_REWRITE, w drugiej zaś podajemy adres naszej strony (z www i bez), a w trzeciej podajemy regułę przepisywania. Schemat jest prosty:

RewriteRule ^adres_jaki_bedzie_wpisany$ adres_jakiego_uzywalismy [L]

Adres jaki będziemy wprowadzać: ^artykul-([a-z0-9._]+)-([^-]+).html$

artykul-[znaki od a do z oraz cyfry i znak podkreślenia "_"]-[cyfry].html

Skrypt przyjmie to jako:

http://mojastronka.pl/artykul.php?kat=kategoria&id=numer_w_bazie

Następna reguła będzie przekierowywać adres:

http://mojastronka.pl/artykul/news/1/

 

 

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mojastronka.pl$ [NC]
RewriteRule ^artykul/([a-z0-9._]+)/([^-]+)/$ artykul.php?kat=$1&id=$2 [L]

 

 

Czyli: RewriteRule ^artykul/[litery_cyfry_oraz_znak_podkreslenia]/[cyfry]/$

A więc, jeśli teraz wpiszemy w przeglądarce:
http://mojastronka.pl/artykul/news/1/

będzie to równoznaczne z wpisaniem:
http://mojastronka.pl/artykul.php?kat=news&id=1

UWAGA!!!
Podczas użycia powyższego przykładu możecie napotkać problemy, gdyż serwer będzie myślał, że znajdujecie się w katalogu /artykul/news/1/ co może powodować problemy z obrazkami, linkami, plikami .css oraz .js. Dlaczego? Otóż często podajecie url do załóżmy obrazka: obrazki/logo.jpg. Gdy będziecie pod adresem http://mojastronka.pl/artykul/news/1/ przeglądarka będzie próbowała wyświetlić obrazek z katalogu /artykul/news/1/obrazki/logo.jpg, który NIE ISTNIEJE! Tak więc, aby temu zapobiec, w kodzie należy zmienić scieżkę z "obrazki/logo.jpg" na "/obrazki/logo.jpg" (ścieżkę bezwzględną), czyli aby szukał folderu obrazki w katalogu głównym "/".

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie