Если у меня есть URL http://www.domain.com/listing.php?company_id=1
, то я могу переписать его на http://www.domain.com/company-name
, используя этот идентификатор вытащить имя из базы данных.
Или мне нужно изменить listing.php, чтобы сделать это ?company_name=company-name
Если кто-то может указать мне в правильном направлении, это было бы здорово.
Благодаря!
Функция карты позволяет без использования идентификатора в URL-адресе, но при этом используется идентификатор в переписанном URL-адресе для поиска базы данных.
http://www.domain.com/another-one
карты для
http://www.domain.com/listing.php?company_id=3423
Вот как я использую текстовые файлы карты, которые я генерирую из запроса к базе данных. Я считаю, что mod_rewrite также делает сопоставление непосредственно с базой данных, из которых я незнакомый (может быть, кто-то может предоставить этот ответ). Я использую Helicon Tech's isapi_rewrite v3, который работает как 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
, а затем переписывает его на ваш URL-адрес listing.php. ${map_company:$1}
ищет URL-адрес в файле карты и возвращает идентификатор.
RewriteCond просто выполняет двойную проверку, чтобы увидеть, есть ли листинг. $ 1 поступает с URL-адреса RewriteRule, NOT_FOUND – это значение по умолчанию, если оно не найдено, и условие есть, если оно не является NOT_FOUND (немного запутано, но это просто проверка, находится ли он в файле). Если он находится в файле, RewriteRule будет запущен. Если он не находится в файле, он пропускает RewriteRule и переходит к большему количеству правил (возможно, к не найденной странице или к другому по умолчанию).
Вам потребуется идентификатор в обоих URL-адресах, но используйте только полное имя в симпатичной ссылке для пользователя. Следующее переписало бы http://www.domain.com/42/company_name
на http://www.domain.com/listing.php?company_id=42
и просто отмените название компании.
RewriteEngine on RewriteRule ^([0-9]*)/([A-Za-z0-9_]*)/$ /listing.php?company_id=$1 [L]
Обратите внимание, что пользователь также может посетить http://www.domain.com/42/wrong_name
и по-прежнему приземляться на правой странице с правильным названием компании. Если это нежелательно, вы можете изменить правило на /listing.php?company_id=$1&company_name=$2
и проверить равенство в /listing.php?company_id=$1&company_name=$2