Сегодня все привыкли к приянтному на глаз формату URL (человеко понятным урлам).
Большинство разработчиков поступают просто:
создают шаблон в htaccess файле для mod_rewrite модуля apache и все работает.
Но что делать, если шаблон URLа может изменятся (например, сайт может отлично работать в режиме: http://site.com/page, но при этом, для поддержки языков, должен работать и в формате: http://site.com/ru/page, при этом показывая те же данные).
Или другой пример: разные страницы сайта обрабатываются разными скриптами, при этом количество фактических параметров, полученных через строку браузера у скриптов разное (http://site.com/?page=index&id=12 и http://site.com/?page=photos&album=2&p_id=12&…)
В таких случаях mod_rewrite бессилен, там как он способен обрабатывать запросы одинаковые по количесвту параметров.
Что же делать в этом случае?
Для этого есть отличное решение:
- В файле htacces в корне сайта устанавливаем редирект всех запросов на один файл php (index.php, например)
- В файле index.php настраиваем обработку строки запроса.
Получается что-то вроде своего собственного mod_rewrite, заточенного под собственные требования.
htaccess
RewriteEngine On
#Подкулючаем модуль mod_rewrite
RewriteCond %{SCRIPT_FILENAME} !-f
#Отключаем редирект запросов, если запрос идет к существующему файлу
RewriteCond %{SCRIPT_FILENAME} !-d
#Отключаем редирект запросов, если запрос идет к существующей папке
RewriteRule ^(.*)$ index.php/$1
#Переводим все запросы на index.php
php
<?php
$url= $_SERVER['REQUEST_URI']; //Получаем полную строку запроса к сайту
$urla=explode('/',$url); //Разбиваем строку на параметры
print_r($urla); //Выводим на экран (временно)
?>
Теперь у нас есть массив всех параметров, которые пришли на сайт от посетителя. То есть теперь мы можем вызвать скрипт вывода на экран данных, передав в него массив параметров.
Допустим 1-й параметр — это название раздела сайта (новости/фотогалерея/форум). А параметры после первого (их точное количество нам не известно) используются уже непосредственно модулями, выполняющими вывод новостей или фотографий или форума.
Тогда по 1-му параметру мы определям модуль, который должен начать работу, и передаем ему массив параметров, которые он уже самостоятельно обрабатывает.
Например:
Входящая строка: http://site.com/news/21/12/2008/
Получили в файле index.php:
['news','21','12','2008']
Проверяем какой модуль вызвать:
if ($urla[0]=='news') $mod_news->show($urla);
и передаем в него параметры.
Все. Задача выполнена. Сайт может получать любое количество параметров.
Также по теме:
- Топ-3 бесплатных сервисов тестирования отображения сайта Проблема тестирования правильного отображения сайта в разных браузерах, в разных...



За такие посты надо награды давать, на полном серьезе!
Информативно,продолжай в том же духе
Отлично написано. Позитива конечно не хватает, но читал на одном дыхании
Спасибо за статью оказалась очень полезной.
Вопрос от чайника
А не будут ПС рассмативать такой метод как 301 или 302 ошибку? Ркдиректо вроде как не приветствуется
Нет. На самом деле радиректа там нет. Все данные просто подгружаются через один файл. Для ПС они кажутся физическими.
Основная задача Яндекса — давать ответы на вопросы пользователей!
Впечатлило, однако!