Уроки Как сделать ЧПУ с помощью .htaccess

Sam Jack

Капитан-Узурпатор
Команда форума
Созидатель
5 Май 2015
13.831
4.893
113
Россия
null-prog.ru
Если Вы умеете немного кодить и пишите свои скрипты, я вам расскажу как легко сделать ЧПУ (человеко понятный урл) с помощью .htaccess.
Что такое ЧПУ?
Например, у нас есть ссылка на страницу новостей с ID номером новости:
Код:
http://site.ru/news.php?id=4
Чтобы сделать такой URL красивее и удобнее, придумали ЧПУ, т.е. представление адреса, например в таком виде:
Код:
http://site.ru/news/4/
Скажете не очень наглядно? А вот такой пример:
Код:
http://site.ru/index.php?do=article&name=kak-sdelat-chpu
а с ЧПУ:
Код:
http://site.ru/articles/kak-sdelat-chpu/
Сделать это очень просто. Для веб-серверов Apache, есть встроенный модуль mod_rewrite. На большинстве хостингов он есть, так же как и на денвере.
Создаем файл .htaccess и кладем его в корень сайта. Первой строкой в этом файле мы пишем:
Код:
RewriteEngine on
Эта строка включает модуль mod_rewrite. Далее, мы пишем сами условия куда и зачем обращаться. Для нашего первого примера, код будет выглядеть так:
Код:
RewriteEngine on
RewriteRule ^news/([0-9]+)/? news.php?id=$1 [L]
Он будет перенаправлять с http://site.ru/news/4/ сюда http://site.ru/news.php?id=4
Все эти условия обычно указываются в htaccess с помощью регулярных выражений.
По второму примеру, код будет выглядеть так:
Код:
RewriteEngine on
RewriteRule ^articles/([-a-zA-Z0-9_]+)/? index.php?do=article&name=$1 [L]
Т.е. с адреса http://site.ru/articles/kak-sdelat-chpu/ нас перебросит на http://site.ru/index.php?do=article&name=kak-sdelat-chpu. Точнее пользователь не увидит реального адреса, а увидит только наш ЧПУ.
Как видите, все достаточно просто – создаем файл htaccess, пишем две строчки и готово!
По регулярным выражениям меня не спрашивайте, я не шарю Знаю только:
Код:
[0-9]+ – это только для цифр
[-a-zA-Z0-9_]+ – это для латинских больших, маленьких, дефиса и подчеркивания
Если во соображаете в регулярных выражениях, Вам будет очень легко написать любое правило. А кто не соображает, тут нужно смотреть примеры, которые я привел и пробовать. Я вчера попробовал, получилось! Не сразу конечно, перерыл кучу инфы, но разобрался.
Надеюсь понятно описал. Будут вопросы, спрашивайте.
Если использовать конструкцию [QSA,L], тогда ЧПУ сможет принимать GET запросы. Т.е. если мы будем без [QSA,L] передавать GET-параметр (http://site.ru/articles/kak-sdelat-chpu/?Get_param=1) то выкинет 404 ошибку. Чтобы этого не происходило и мы смогли принимать GET запросы, нужно:
Вместо этого:
Код:
RewriteRule ^news/([0-9]+)/? news.php?id=$1 [L]
Нужно написать [QSA,L] на конце:
Код:
RewriteRule ^news/([0-9]+)/? news.php?id=$1 [QSA,L]