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: , , .

Dodaj komentarz

10 komentarzy do "mod_rewrite w praktyce – przyjazne, krótkie adresy URL"

avatar
najnowszy najstarszy oceniany
callisto
Gość

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

adi
Gość

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ść
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ść

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ść

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.