Функция карты позволяет вообще не использовать идентификатор в URL-адресе, но в то же время использовать идентификатор в переписанном URL-адресе для поиска в базе данных.
http://www.domain.com/another-one
отображается на
http://www.domain.com/listing.php?company_id=3423
Вот как я использую текстовые файлы карты, которые я генерирую из запроса к базе данных.Я считаю, что mod_rewrite также выполняет сопоставление с базой данных напрямую, о которой я незнаком (возможно, кто-то может дать такой ответ).Я использую isapi_rewrite v3 от Helicon Tech, которая работает как mod_rewrite, так что это должно работать для вас.
Пример файла карты с именем map_company.txt
some-company 12
another-one 3423
freds-fill-dirt-and-croissants 44
Правила перезаписи:
RewriteMap map_company txt:map_company.txt [NC]
RewriteCond ${map_company:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^/(.*) /listing.php?company_id=${map_company:$1} [NC,QSA,L]
RewriteMap назначает текстовый файл map_company.txt переменной с именем map_company (названнойто же самое, чтобы быть последовательным).
RewriteRule выполняет свою работу.Он записывает все после косой черты в $1
, а затем переписывает его в ваш список list.php.${map_company:$1}
ищет URL-адрес в файле карты и возвращает идентификатор.
RewriteCond просто выполняет двойную проверку, чтобы увидеть, есть ли листинг.$ 1 исходит из URL-адреса RewriteRule, NOT_FOUND - это значение по умолчанию, если оно не найдено, а условие - если оно не-NOT_FOUND (немного запутано - но оно просто проверяет, находится ли оно в файле).Если он находится в файле, RewriteRule будет запущен.Если его нет в файле, он пропускает RewriteRule и переходит к дополнительным правилам (возможно, к странице не найден или к другому значению по умолчанию).