@plac

Проблема с красивым URL (htaccess), как исправить?

Здравствуйте, пытался сделать ЧПУ (красивые url) для самопистного сайта и возникла одна проблема которую не могу решить. Прошарил уже пол интернета - так ничего и не вышло.

ЧПУ реализовываю через htaccess, сейчас весь его код выглядит так:

RewriteEngine on
RewriteRule ^module_news/([0-9]+)$ module_news/fullnews_page.php?id=$1 [QSA,NC]


Как вы видите у меня динамические страницы с GET запросами и тут проблем не возникло - страница /module_news/fullnews_page.php?id=17 подгружается через адрес /module_news/17.

НО!
Во-первых, у нас получаются дубли - те одна и та же страница доступна по 2 URL-адрессам.
Во-вторых, необходимо как то подменить адрес, то есть если пользователь вводит /module_news/fullnews_page.php?id=17 она перенаправляла (заменяла в строке URL) на красивый /module_news/17 . То есть красивый URL был приоритетный.

Варианты со сторонними фреймворками - не то.

Просьба описать решение максимально подробно. И в принципе, как оптимальней всего делать красивые URL?
Заранее огромное спасибо!
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 2
@evilray
Правильнее настроить модреврайт так, чтобы он любой запрос отправлял на index.php, а уже в нем разбирать строку как больше нравится. Подробнее про фронт контроллер. Пример на php.

Разбор url строки и сопоставление адреса с нужным модулем (контроллером/экшеном) во фронт контроллере называется маршрутизация (routing).

Перенаправления:
Redirect 301 ^module_news/fullnews_page.php?id=([0-9]+)$  http://site.ru/module_news/$1

Подробнее можно поискать, например, по запросу "редирект htaccess".
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега htaccess
1. У движков этих урлов может быть до 5, все что можно сделать 301
2.
RewriteCond %{QUERY_STRING} (^|&)id\=([0-9]{1,})\$($|&)
RewriteRule ^.+[^/]/fullnews_page\.php$ /$1/%2? [L,R=301]


Гет не является частью урла и его выделяем по другому
[0-9]{1,} - от нуля до 9 , один и более раз ( это вторая скобка)
.+[^/] более 1символа но не слеш, до слеша ( ну костыль, можно и через квантификаторы)
/$1/%2 первая скобка с рула и вторая с конда
? - в конце удалит гет параметр оставит красивый чпу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы