mod_rewrite w praktyce – przyjazne, krótkie adresy URL
PHP + MySQL Aktualizacja: 24.07.2017

mod_rewrite w praktyce – przyjazne, krótkie adresy URL

Krótkie adresy stron internetowych nie tylko ładnie wyglądają. Istotną zaletą takiego rozwiązania jest przejrzystość w hierarchii takiej witryny, jak również szybszy proces indeksowania strony przez roboty wyszukiwarek. Moduł mod_rewrite pozwala na tworzenie krótszych adresów - przyjrzyjmy mu się bliżej.

Jak powszechnie wiadomo, na stronach internetowych warto udostępniać użytkownikom nawigację (nie zgubią się pośród wielu kategorii, podstron itd). Poza tym warto zadbać o prostą konstrukcję adresów URL - jak wspomniałem wcześniej - ze względu na użytkownika i wyszukiwarki.

Serwer Apache udostępnia moduł mod_rewrite. Umożliwia on przy minimalnym nakładzie pracy, uzyskanie efektu który zająłby normalnie więcej czasu. Dokładniej chodzi o "przepisywanie linków" - czyli na przykład zamiana formy /?d1=artykul&id=4543oje3&sesja=34355nn4j39&ip=3224 na następującą /artykul/tytul-newsa/.

Tworzymy plik o nazwie .htaccess ("kropka" następnie "htaccess"). Wklejamy do niego niżej wymieniony kod, w ten sposób informujemy serwer jaką operację planujemy wykonać.

Options FollowSymLinks
RewriteEngine On

Przepisywanie: adres-strony.pl na www.adres-strony.pl

Następnie tworzymy przekierowanie - użytkownicy którzy weszli na stronę bez przedrostka "www" zostaną przeniesieni na taką.

RewriteCond %{HTTP_HOST} ^adres-strony.pl
RewriteRule (.*) http://www.adres-strony.pl/$1 [R=301,L]

"Ręczne" przepisywanie

Dla przykładu z postaci "podstrona.php" na :podstrona.html". Zmieniając rozszerzenia plikom ułatwimy indeksowanie witryn robotom wyszukiwarek. Patrząc na posunięcia większości znanych witryn i portali, bardziej korzystne i naturalne będzie rozszerzenie ".html" niż takie ".php".

RewriteRule ^podstrona.html$ podstrona.php [L]
  • podstrona.php - obecny adres
  • podstrona.html - adres który chcemy uzyskać

Dynamiczne przepisywanie

Dla przykładu z postaci "http://adres-strony.pl/?d1=artykuly&d2=informacje" na "http://adres-strony.pl/artykuly/informacje.html". Zobaczmy jak zmienić adres do postaci bardziej czytelnej, prostej i przyswajalnej. Warto wspomnieć że omawiana "zamiana" będzie dokonywana w sposób automatyczny, bez konieczności ingerencji użytkownika (nie będzie trzeba wprowadzać osobno każdej podstrony).

RewriteRule ^(.+)/(.+).html$ index.php?d1=$1&d2=$2 [L]

Powyższy przykład zmieni index.php?d1=wartosc1&d2=wartosc2 na /wartosc1/wartosc2.html. Natomiast poniższy z index.php?d1=wartosc1 na /wartosc1.html.

RewriteRule ^(.+).html$ index.php?d1=$1 [L]
Jeżeli po wysłaniu pliku ".htaccess" na serwer pojawi się błąd treści "Interial Server Error" oznacza to, że serwer nie obsługuje przepisywania adresów url (mod_rewrite).

Autor: . Tagi: , , .

10
Dodaj komentarz

avatar
7 Comment threads
3 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
callistoBartosz StefanickiadiKrzysiekkuba Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

najnowszy najstarszy oceniany
callisto
Gość

Witam używam takiego kodu do tworzenia podstrony w htaccess, jest bezpieczny?
RewriteRule ^([^/]*)?/?$ index.php?$1 [L]

adi
Gość
adi

a jeśli mam cos takiego: domena.pl/shop/products/178 i chcę by się wyświetlało domena.pl/klep/produkty/felgi to jak to przepisać? da sie zamienić '/products/178/' na samo '/felgi/'?

Krzysiek
Gość
Krzysiek

Drążę temat i są już małe postępy, ale i nowe pytania. Zobaczcie poniższy opis i doradźcie co można zrobić: Sprawa wygląda tak: mam stronę zwykłą w html, która jest na serwerze w folderze o nazwie domena.pl, w tym folderze jest np index.html i podfolder z np. o-nas.html. szukam rozwiązania jak uchronić się przed powielaniem treści: http://www.domena.pl domena.pl domena.pl/index.html itp. Zależy mi również na wyrzuceniu z url rozszerzenia .html, żeby link wyglądał tak: domena.pl/podfolder/o-nas w tym celu w .htaccess mam tak: RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} !^domena.pl [NC] RewriteRule ^(.*)$ http://domena.pl%{REQUEST_URI} [R=301,L] RewriteRule ^index.html$ http://domena.pl/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond… Czytaj więcej »

Bartosz Stefanicki
Gość
Bartosz Stefanicki

Przekierowanie 301 z http://www.nazwa-strony.pl/index.php na http://www.nazwa-strony.pl

[code lang="php"]RewriteEngine on
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.nazwa-strony.pl/ [L,R=301][/code]

kuba
Gość
kuba

Mam taki kod:
Options FollowSymLinks
RewriteEngine On
RewriteRule ^index.html$ index.php [L]

Gdy wpisuje w przeglądarce adres strony, to nadal mi się wyświetla index.php, jak to zrobić żeby w pasku adresu wyświetlał się index.html?

Ebro
Gość

Absolutna podstawa, jeżeli chcemy, by nasz serwis był seo-friendly ;)

Boxi
Gość

Nie wiem czy dobrze zrobiłem, ale po kolei:
1. Dodaj filtr
2. Typ - Włącznie
3. Pole filtra: nazwa Hosta
4. Wzorzec: blabla.pl/wp-content/uploads/
5. Dodaj i zapisz.

I po tych czynnościach powinny mi się pojawiać statystyki oglądalności danych zdjęć?

Boxi
Gość

Ja mam z kolei inne pytanie.
Czy można sprawdzić statystyki w google analytics ile osób weszło na podany adres obrazka z rozszerzeniem .jpg np http://itporady.pl/files/images/phpthumb/phpThumb.php?src=../logo/apache-m.png&w=110&h=110&zc=B&f=png&q=90

Bartosz Stefanicki
Gość

@Boxi,
przeczytaj o filtrach w Google Analytics.