ЧПУ с кириллицей

Waki

Постоялец
Регистрация
14 Ноя 2012
Сообщения
64
Реакции
21
На сайте имеется поиск где присутствует кириллица, пример урл:
Код:
http://site.com/search.php?city=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&category=1&marka=%D0%92%D0%B0%D0%B7&model=2112
category = 1 (категория легковых)
city = Москва
marka = Ваз
Как тут сделать ссылку вида:
Код:
http://site.com/cars/moscow/vaz/2112.html
Предполагалось сделать через htaccess, но там слишком много строк получится. (где-то мельком видел что можно реализовать через файл httpd.conf, но так раньше не делал)

Как поступить в данном случае?
 
htaccess - это быстрый способ правки httpd.conf. Т.е. если Вам надо прописать много правил в htaccess - это означает, что в httpd.conf их нужно будет вписать как минимум не меньше.
 
  • Нравится
Реакции: Waki
htaccess - это быстрый способ правки httpd.conf. Т.е. если Вам надо прописать много правил в htaccess - это означает, что в httpd.conf их нужно будет вписать как минимум не меньше.

А как туда прописывать? Сейчас на сервере установлен только apache, нужен ли будет для этих целей nginx ?
Есть ли другое решение, кроме перечисления всех возможных вариантов урл-ов с кириллицей? (кроме правки скриптов)
 
Выполнить это иначе - нельзя. Нужно либо прописывать все правила, либо объяснять скрипту, что Moscow - это Москва, а LADA - это ВАЗ...

Вообще, по хорошему, есть смысл искать не по слову, а по ID категории. Увы, я не знаю Вашей CMS, судить о возможности этого не могу, но просто расскажу как это делается.
У меня есть блог. Категория называется "Новости" и имеет id = 1. В ЧПУ она показывается как news, что прописано в соответственном поле БД.

При формировании запроса, ссылка получается такой: ~/blog/1-news/123-mega-news.html

Как это работает. ЧПУ передаёт скрипту только ID категории и ID новости. Дальше уже сам скрипт проверяет верность URL и делает 301 редирект по необходимости. Это и безопасно, и выглядит не так уж плохо. Почему не по имени? Если я укажу ~/blog/1-qwerty/123-mega-news.html - новость всё равно откроется, но произойдёт редирект на ~/blog/1-news/123-mega-news.html А вот если я поменяю ID, то откроется уже совершенно другая новость из базы.

Можно делать и по названию, но тогда надо ставить фильтры, а так достаточно Intval и ЧПУ безопасно.
 
Почему не по имени? Если я укажу ~/blog/1-qwerty/123-mega-news.html - новость всё равно откроется, но произойдёт редирект на ~/blog/1-news/123-mega-news.html
Видел много самописных CMS, где этот момент не учитывали - не было проверки на правильный URL. т.е. тупо 1-news 1-news1 1-news2 - всё были дублями.


Как тут сделать ссылку вида:
Задача-то какая стоит?
Поиск часто закрывают от индексации по той же причине - появление дублей.

Можно написать свой роутер, который будет преобразовывать введённый URL.. Если на пальцах, самый простой и универсальный вариант.. так примерно:


Код:
<?php
$routes = array(
'/cars/moscow/vaz/2112.html'=>array('category'=>1,'city'=>'Москва','marka'=>'Ваз','model'=>'2112','file'=>'search.php'),
);
 
if (isset($routes[$_SERVER['REQUEST_URI']])) {
$data = $routes[$_SERVER['REQUEST_URI']];
$file = $data['file']; unset ($data['file']);
$_GET = array_merge($_GET,$data);
include $file;
exit();
}
// тут 404 ошибка

При помощи .htaccess все неразобранные URL-ы направляются на этот роутер (или include-тся в первых строчках index.php, если уже есть перенаправление работающее)

Массив вместо жёсткого указания соответствий можно формировать автоматически по правилам из URL (при помощи регулярки, например).
* если в CMS предусмотрены штатные средства маршрутизации, лучше использовать их.
 
  • Нравится
Реакции: Waki
Назад
Сверху