Co nie co chciałbym przedstawić o przepisywaniu linków za pomocą mod_rewrite, czyli tak zwanym Seo URL (z ang. Search engine optimization), przepisywaniem linków, friendly url itp. Cała sztuka polega na tym, że przesyłamy tylko jednego $_GET’a, a następnie za pomocą php obrabiamy wynik, i interpretujemy wartości przedstawione w poszczególnych elementach tablicy. Gdyż właśnie w niej będziemy przechowywać ścieżki.

Mod rewrite

No to do dzieła przykład użycia, plik .htaccess:

1
2
3
4
5
6
7
8
9
Options +FollowSymLinks
DirectoryIndex index.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Odnośnie RewriteCond działa jakby if, więc !-f nie ma być plikiem, a !-d nie ma być katalogiem, jeżeli jest ok, to idzie dalej, flaga L informuje apache o zakończeniu działania skryptu.

Mamy już gotowy plik .htaccess, teraz możemy przejść do napisania funkcji która nam ładnie podzieli całego $_GET’a.

1
2
3
4
5
6
7
8
9
<?php
function Route()
{
    if($_GET['q'] != '')
    {
      $fetch = explode('/', $_GET['q']);
    }
}
?>

I wtedy mamy linki w postaci:

http://www.jakas-strona.pl/jakis/adres/ktory/widzi/user

a Ty widzisz to tak:

1
2
3
4
5
6
7
8
Array
(
  [0] = "jakis"
  [1] = "adres"
  [2] = "ktory"
  [3] = "widzi"
  [4] = "user"
)

Albo (pomysł z forum.php.pl):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function Route()
{
    if($_GET['q'] != '')
    {
      $fetch = explode('/', $_GET['q']);
      $n = count($fetch);
      $_PARAM = array();
      for ($i = 0; $i < $n; $i += 2)
      {
        $_PARAM[$fetch[$i]] = $fetch[$i+1];
      }
    }
}

I adresy mamy w postaci:

http://www.jakas-strona.pl/kategoria/5/produkt/6

będziemy mieli dostęp wtedy do tablicy $_PARAM tak jak z $_GET, czyli

1
2
3
4
5
6
<?php
echo $_PARAM['kategoria']; // powinno dać nam 5
echo $_PARAM['produkt']; // ... 6
 
print_r($_PARAM);
?>

Seo URL

Czym jest tak na prawdę te Seo URL? I czy to wszystko jest mi na prawdę potrzebne?
Odpowiedź jest dwojaka, jak wiemy algorytmy google z rankingiem są cały czas aktualizowane, chociaż google ostro twierdzi że ich nie tyka. Wystarczy wejść na Polskie forum odnośnie optymalizacji witrny i pozycjonowania i możemy przeczytać co prawdziwi pozycjonerzy o tym myślą. Co do rankingu dzięki seo url, po troche jest w tym prawda, chodź najważniejsze są linki prowadzące do Twojej witryny. Roboty zbierają dane z adresu też, dzięki temu łatwiej jest Ci się znaleźć w indeksie google, zwróć uwagę przy wyszukiwaniu w google, że podana fraza szukana jeżli znajduje się w adresie strony, jest przez google podświetlana.

Słów kilka na zakończenie

Używać co kto woli, w moim przypadku nie ma tablicy asocjacyjnej, jest zwykła tablica iteracyjna. Url’e mogą być krótsze chodź nie muszą, przy takim podejściu do adresów, należy pilnować się o adresacje w tabeli. I pamiętajmy, pierwszy element tablicy to nie jest 1, tablica 30-elementowa nie ma ostatniego elementu $tab[30].

Czego tutaj brakuje? Oczywiście filtrowania $_GET['q']. Do tego wrócimy w bliższym czasie.