Как сделать ЧПУ с помощью .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_]+ – это для латинских больших, маленьких, дефиса и подчеркивания
Если во соображаете в регулярных выражениях, Вам будет очень легко написать любое правило. А кто не соображает, тут нужно смотреть примеры, которые я привел и пробовать. Я вчера попробовал, получилось! Не сразу конечно, перерыл кучу инфы, но разобрался.
Надеюсь понятно описал. Будут вопросы, спрашивайте.






Тут стоило бы отметить, что и ссылки, которые генерирует скрипт, надо изменить (вместо index.php?do=article&name=kak-sdelat-chpu — /articles/kak-sdelat-chpu/).
А вообще, конечно, правильнее редиректить на index.php и разбирать $_SERVER["REQUEST_URI"].
Полезная статья. Примерно также создаются ЧПУ в некоторых партнёрских интернет-магазинах. В любом случае, спасибо, пригодится.
Извеняюсь за то что не потеме. Сегодня решил проверить откуда идут посетители один из моих сайтов. Так статистика показала что 95% идет с яндекса остальные с сайтов и закладок. Меня заинтересовало почему нет от гугла хотябы одного посетителя в сутки. Полез в панель вебмастера: сайт в индексе. стал смотреть по каким запросам у меня есть показатели и увидел странную картину: сайт занимает топовые места по названиям элементов шаблоны. к примеру по запросу n_shap_logo (написал приблизительно) (таких запросов мало, проверял шаблон там все путем) занимает первое место. по запросу site:сайт тоже топ. А вот по тем запросам по каким у яндекса в топе показатель 50 и ниже.
Подскажите что это? И как боросться с этим?
Скажи пожалуйста, как ты сделал так, что вместо прямых рефссылок отображаются ссылки вида ?
Это плагин или сам на пхп писал?
А то сам хочу на блоге сделать такое, чтоб и без ноуиндексов и чтоб вес не перетекал.
anisart, Если не ошибаюсь то есть скрипт такой в паблике. Также можете создать папку на вашем сайте (ее запретить к индексации) а в ней создавать папки в которых делать index.html или index.php с автоматическим переходом ту страницу куда надо. Noindex не будет но прийдется для каждой партнерки делать свои файлы и папки
Правильно. Все как сказал новичок. Просто header редиректом. И папочки создаю. При желании, могу написать отдельный пост.
А что ты думаешь насчет такого способа как я написал (но почему-то не опубликовалось)?
Кажись сам виноват либо браузер, т.к. коменты видимо не модерируются)
Тогда еще раз напишу. Через .htaccess строчкой redirect / http://
Уход по-английски — хамство, возведенное в ранг национальной традиции.
Спасибо. Только когда я перехожу по ссылке не-чпу, меня не перебрасывает на ссылку чпу. Не должно или сервер не настроен?
Во во …. именя никуда не перебрасывает.А должно ли вообще?
Если по не ЧПУ ссылке переходить, перебрасывать и не должно.
Я разобрался. Допишите кстати, что если использовать конструкцию [QSA,L], то с ЧПУ можно принимать GET-параметры, будет полезно многим, я думаю
RewriteRule ^news/([0-9]+)/? news.php?id=$1 [QSA,L]
т.е. если будет так, тогда при попытке перейти по не ЧПУ ссылке, перекинет на ЧПУ?
Нет-нет.
Если ты без QSA передашь GET-параметр () то выкинет 404 ошибку.
А если будет QSA то не выкинет 404, а передана этой странице GET-переменная. Ну это для кодеров
Как сделать если методом GET передаются 2 аргумента?
Аналогично, нужно с регулярными выражениями разбираться.
Интересно, ссылка вида может не работать, если в базе имеется две статьи с таким же названием?
Каким образом их отличать?
Это уже зависит от самого кода, обработчика. Как настроишь, так и будет выводить. Как с ЧПУ, так и без него.
Просто выберется первая запись по PRIMARY INDEX или по ORDER BYв MySQL.
Зачем создавать страницы с одинаковыми названиями? о_О
Очень благодарю. Как раз уже около месяца ищу эту информацию, а это как раз то, что мне нужно!