1. Создание поддиректорий Самый простой способ - это создать для каждого раздела/статьи поддиректорию и поместить туда файл index.php. Использовать данный метод имеет смысл на сайтах с небольшой структурой.
2. Обработка 404 ошибки В файл .htaccess пишем: ErrorDocument 404 /404.php Эта строка указывает серверу перенаправить запрос на скрипт /404.php, если запрошенный файл не был найден. Когда пользователь наберет несуществующий адрес , сервер перенаправит запрос на скрипт 404.php со всеми переменными окружения. В $_SERVER["REQUEST_URI"] будет содержаться запрошенный пользователем URI (/catalog/mobile/nokia_3310/). Остается только "вытащить" из строки '/catalog/mobile/nokia_3310/' необходимые идентификаторы. Однако страница 404 будет выдавать браузеру заголовок "HTTP/1.1 404 Not Found", а страницы с таким заголовком не индексируются поисковиками, поэтому в начале файла 404.php пишем: header("HTTP/1.1 200 OK"); Минусов у данного способа два: а) нельзя посылать на несуществующий URL данные методом POST б) Лог ошибок сервера будет забит (необходимо либо отключить ведение лога, либо периодически его чистить).
3. Модуль Apache mod_rewrite В файле .htaccess с помощью регулярных выражений прописываются правила, по которым Apache должен сделать соответствующие перенаправления. Например,
RewriteEngine On RewriteBase / RewriteRule ^catalog/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$ catalog/list.php?SECTION=$1&PRODUCT=$2
Каждый запрос Apache будет сопоставлять с шаблоном '^catalog/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$' и в случае совпадения (например, пользователь набрал перенаправит запрос на скрипт /catalog/list.php, в котором переменная $_GET["SECTION"] будет равна 'mobile', а $_GET["PRODUCT"] - 'nokia_3310'.
Теперь запросы, удовлетворяющие маске "^([^\.]+)$" (все запросы, кроме тех, что содержат точку) будут перенаправляться на скрипт handler.php. Маски для файлов можно задать и другие, разумеется. Этот способ позволяет передавать данные методом POST.