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.