Как сделать ЧПУ с помощью .htaccess
Если Вы умеете немного кодить и пишите свои скрипты, я вам расскажу как легко сделать ЧПУ (человеко понятный урл) с помощью .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_]+ — это для латинских больших, маленьких, дефиса и подчеркивания
Если во соображаете в регулярных выражениях, Вам будет очень легко написать любое правило. А кто не соображает, тут нужно смотреть примеры, которые я привел и пробовать. Я вчера попробовал, получилось! Не сразу конечно, перерыл кучу инфы, но разобрался.
Надеюсь понятно описал. Будут вопросы, спрашивайте.
UPD by Hugo: Если использовать конструкцию [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]
Интересная статья, только вот на .htaccess мне удалась сделать, а оформить на php не поучается, то есть я хочу сделать с помощью регулярных выражений нормальную ссылку например у меня есть такая ссылкаhttp://site.ru/news.php?id=name_statia/2013-02-11 , я хочу её преобразовать в такую ссылку http://site.ru/news/name_statia/2013-02-11 . подскажите как это сделать?
[Ответить]
Здравствуйте! Спасибо Вам за то что так хорошо рассписали про ЧПУ в .htaccess
[Ответить]
Всё работало, только с главной страницей были проблемы из-за отсутствия GET параметра пока не добавил строчки:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
[Ответить]