Как сделать ЧПУ с помощью .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_]+ – это для латинских больших, маленьких, дефиса и подчеркивания

Если во соображаете в регулярных выражениях, Вам будет очень легко написать любое правило. А кто не соображает, тут нужно смотреть примеры, которые я привел и пробовать. Я вчера попробовал, получилось! Не сразу конечно, перерыл кучу инфы, но разобрался.

Надеюсь понятно описал. Будут вопросы, спрашивайте.

Похожие материалы

Объявление: купить корм для собак в Киеве можно в зоомагазине Пет-Джой.ком.юа

21 комментарий

  1. Тут стоило бы отметить, что и ссылки, которые генерирует скрипт, надо изменить (вместо index.php?do=article&name=kak-sdelat-chpu — /articles/kak-sdelat-chpu/).

    А вообще, конечно, правильнее редиректить на index.php и разбирать $_SERVER["REQUEST_URI"].

  2. Полезная статья. Примерно также создаются ЧПУ в некоторых партнёрских интернет-магазинах. В любом случае, спасибо, пригодится.

  3. Новичок

    Извеняюсь за то что не потеме. Сегодня решил проверить откуда идут посетители один из моих сайтов. Так статистика показала что 95% идет с яндекса остальные с сайтов и закладок. Меня заинтересовало почему нет от гугла хотябы одного посетителя в сутки. Полез в панель вебмастера: сайт в индексе. стал смотреть по каким запросам у меня есть показатели и увидел странную картину: сайт занимает топовые места по названиям элементов шаблоны. к примеру по запросу n_shap_logo (написал приблизительно) (таких запросов мало, проверял шаблон там все путем) занимает первое место. по запросу site:сайт тоже топ. А вот по тем запросам по каким у яндекса в топе показатель 50 и ниже.
    Подскажите что это? И как боросться с этим?

  4. Скажи пожалуйста, как ты сделал так, что вместо прямых рефссылок отображаются ссылки вида http://crazy-russian.ru/partnerki/eroprofit/ ?
    Это плагин или сам на пхп писал?
    А то сам хочу на блоге сделать такое, чтоб и без ноуиндексов и чтоб вес не перетекал.

  5. Новичок

    anisart, Если не ошибаюсь то есть скрипт такой в паблике. Также можете создать папку на вашем сайте (ее запретить к индексации) а в ней создавать папки в которых делать index.html или index.php с автоматическим переходом ту страницу куда надо. Noindex не будет но прийдется для каждой партнерки делать свои файлы и папки

  6. Правильно. Все как сказал новичок. Просто header редиректом. И папочки создаю. При желании, могу написать отдельный пост.

  7. А что ты думаешь насчет такого способа как я написал (но почему-то не опубликовалось)?

  8. Кажись сам виноват либо браузер, т.к. коменты видимо не модерируются)
    Тогда еще раз напишу. Через .htaccess строчкой redirect / http://

  9. Somsreveinime

    Уход по-английски — хамство, возведенное в ранг национальной традиции.

  10. Спасибо. Только когда я перехожу по ссылке не-чпу, меня не перебрасывает на ссылку чпу. Не должно или сервер не настроен?

  11. Во во …. именя никуда не перебрасывает.А должно ли вообще?

  12. Если по не ЧПУ ссылке переходить, перебрасывать и не должно.

  13. Я разобрался. Допишите кстати, что если использовать конструкцию [QSA,L], то с ЧПУ можно принимать GET-параметры, будет полезно многим, я думаю :-)

  14. RewriteRule ^news/([0-9]+)/? news.php?id=$1 [QSA,L]
    т.е. если будет так, тогда при попытке перейти по не ЧПУ ссылке, перекинет на ЧПУ?

  15. Нет-нет.
    Если ты без QSA передашь GET-параметр (http://site.ru/articles/kak-sdelat-chpu/?Get_param=1) то выкинет 404 ошибку.

    А если будет QSA то не выкинет 404, а передана этой странице GET-переменная. Ну это для кодеров :)

  16. Как сделать если методом GET передаются 2 аргумента?

  17. Аналогично, нужно с регулярными выражениями разбираться.

  18. Интересно, ссылка вида http://site.ru/index.php?do=article&name=kak-sdelat-chpu может не работать, если в базе имеется две статьи с таким же названием?
    Каким образом их отличать?

  19. Это уже зависит от самого кода, обработчика. Как настроишь, так и будет выводить. Как с ЧПУ, так и без него.

  20. Просто выберется первая запись по PRIMARY INDEX или по ORDER BYв MySQL.
    Зачем создавать страницы с одинаковыми названиями? о_О

  21. Очень благодарю. Как раз уже около месяца ищу эту информацию, а это как раз то, что мне нужно!

Есть что сказать?