Niewielka sztuczka, którą od zeszłego roku stosuję w PHP, pozwala na łatwe budowanie czytelnych linków. Dzięki temu twój odnośnik zamiast http://example.com/index.php?cat=shop&id=25, może wygląć tak: http://example.com/shop/25, albo nawet tak: http://example.com/shop/25/swieze_jaja_wiejskie.

Oczywiście, to samo można zrobić za pomocą mod_rewrite, ale wada rozwiązania jest taka, że dodanie nowej sekcji do serwisu wymaga ingerencji w pliki serwera WWW.

Mój niewielki hack polega na dodaniu do konfiguracji Apache'a jednej jedynej linijki (dla ułatwienia umieszczamy ją w pliku .htaccess):

ErrorDocument	404	/index.php

Jak można się domyślić, plik index.php jest jedynym plikiem w całym drzewie dokumentów danej domeny i od tego momentu odpowiada on na wszelkie zapytania o nieistniejące dokumenty.

Pozostało jeszcze zatroszczyć się o obsługę tego po stronie kodu:

``` // sprawdzamy, o jaki dokument jest zapytanie $request = $_SERVER[‘REDIRECT_URL’];

// sprawdzamy, czy zapytanie dotyczy nieistniejacego pliku if (($request) && ($request != ‘/’)) { $request = explode(‘/’, $request); $section = $request[1]; $request = array_splice($request, 2); $subsection = implode(‘/’, $request); } else // jesli nie, to przekierowujemy na index { header(‘Location: /index’); die(); }

// obslugujemy zadanie switch($section) { case ‘index’: // […] break; case ‘shop’: // […] break; default: // […] wyswietl blad 404 break; } ```

Zalety - rozwiązanie jest nieinwazyjne względem serwera i pozwala strukturę dokumentów kontrolować na poziomie kodu. Dzięki temu łatwo utrzymywać strukturę, którą ciężko byłoby zarządzać na poziomie mod_rewrite (np. tłumaczone nazwy kategorii).

Wady - nieistniejące strony nie mogą otrzymywać danych przez zlecenia GET i POST, więc wszystkie parametry muszą być częścią URI.

Najciekawsze efekty uzyskuje się przez połączenie tak serwowanych dokumentów ze strukturą statyczną (istniejące pliki nie są przekierowywane). Można zachować wtedy elastyczność rozwiązania z możliwością przekazywania danych z przeglądarki. Dzięki temu możliwa jest obsługa formularzy na stronach.