Правильно настраиваем чпу для сайта htaccess

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

Если Вы умеете немного кодить и пишите свои скрипты, я вам расскажу как легко сделать ЧПУ (человеко понятный урл) с помощью .htaccess.

Что такое ЧПУ?

Например, у нас есть ссылка на страницу новостей с ID номером новости:

Чтобы сделать такой URL красивее и удобнее, придумали ЧПУ, т.е. представление адреса, например в таком виде:

Скажете не очень наглядно? А вот такой пример:

Сделать это очень просто. Для веб-серверов Apache, есть встроенный модуль mod_rewrite . На большинстве хостингов он есть, так же как и на денвере.

Создаем файл .htaccess и кладем его в корень сайта. Первой строкой в этом файле мы пишем:

Эта строка включает модуль 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] на конце:

ЧПУ для сайта на PHP. Простой и эффективный ЧПУ

Не так давно излазив порядочное количество сайтов, так ничего и не нашёл по интересующей меня теме о простом ЧПУ для сайтов, материалы безусловно были, но рассказано очень уж непонятно и както размыто, создавалось ощущение будто авторы текстов сами не понимали о чём пишут. Это также напоминало отдалённый корявый перевод с другого языка, настолько корявый что теряется весь смысл.

Ну так вот и с тех самых пор я хотел создать свой материал об этой теме, который наконец раскроет тайны создание простого незамысловатого ЧПУ без излишеств, строго и эффективно. Будем создавать ЧПУ с использованием .htaccess и непосредственно mod_rewrite, но всё по порядку.

Итак, начнём. Для примера выдумаем небольшую ситуацию:

Допустим нам нужно чтобы файл index.php принимал 2 переменные, например cat и art, т.е index.php?cat=содержимое&art=содержимое. Пусть в рамках примера cat — категория, art — статья, и есть у нас материал доступный по адресу index.php?cat=php&art=info-chpu, но мы понимаем как некрасиво это будет выглядеть в адресной строке браузера и нам нужно чтобы наш материал был доступен по адресу php/info-chpu. Поэтому нам нужен ЧПУ:

Главная роль представляемого ЧПУ отдаётся файлу .htaccess именно он делает всю работу. Итак чтоже должно быть в файле .htaccess:

RewriteEngine On
RewriteRule ^(.*)/(.*)$ index.php?cat=$1&art=$2 [L]

Теперь попытаюсь объяснить содержимое файла .htaccess. Строка RewriteEngine On — используется для так сказать включения перенаправления, по правилам которые вы опишите. Пользователь переходит по ссылке php/info-chpu, запускается тут же содержимое файла .htaccess, которое видит что запрашиваемая ссылка php/info-chpu подходит по правилу (.*)/(.*), всвязи с чем разделяет запрашиваемый адрес по частям правила содержимое1/содержимое2 и передаёт их исполнительному файлу index.php?cat=содержимое1&art=содержимое2.

Вот и всё. Теперь всё что нам следует сделать это «ловить» и использовать нашим index.php две переменные cat и art.

Внимание если обработчиком php вы используете cgi-bin то вместо файла .htaccess у вас должен быть htaccess.txt

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

Читать еще:  Укажите грамматически правильное продолжение предложения составляя предложение

index.php — основной файл

htaccess.txt — файл для Cgi-bin обработчика

.htaccess — файл для Apache обработчика

Распакуйте содержимое архива к себе на сервер, и попробуйте запрос например /trololo/512 или любой другой, — как вы поняли писать не стоит, это я указал так место куда вы распакуете архив и откуда будете запускать файл.

Если остануться вопросы — пишите в комментариях.

Для тех, кто не понял что и как.

Вся суть данного ЧПУ состоит в htaccess файле, а что он именно делает?

RewriteEngine On
RewriteRule ^(.*)/(.*)$ index.php?cat=$1&art=$2 [L]

Можно сказать данный пример принимает адрес вида:

и отдаёт обработчикам ужи такого вида:


А мы уже файлом index.php принимаем $_GET[‘cat’] и $_GET[‘art’], которые в себе содержат название категории и материала.

Показанный в статье пример можно изменять как угодно.

Например у нас есть рабочий адрес domen.ru/avto.php?cat=sportcars&avto=porshe&model=carrera и если мы хотим сделать его ЧПУ вида:

, то пишем в .htaccess:

RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)$ avto.php?cat=$1&avto=$2&model=$3 [L]

И после того как мы добавим вешеуказанные пару строк в .htaccess файл, наш материал будет открываться для посетителей по адресу:

Или вдруг если у нас имеется несколько обработчиков PHP, то можно для каждого поставить правило в .htaccess:

RewriteEngine On
RewriteRule ^avto/(.*)$ avto.php?id=$1 [L]RewriteRule ^air/(.*)$ forair.php?id=$1 [L]
RewriteRule ^flot/(.*)$ waterflot.php?id=$1 [L]

Из примера видно, то всё запросы начинающиеся с domen.ru/avto/ будут отправляться в обработчик avto.php, начинающиеся с domen.ru/air/, в обработчик forair.php.

Теперь стоит отметить важное! перед вашим RewriteRule поставьте такой код:

Этот код позволит вам избежать направления на обработчик при запросе статических папок и файлов, физически хранящихся в папке сайта.

Ещё очень важная особенность ЧПУ, которая не была освещена это ссылки в HTML коде вашего сайта к стилям, картинка и пр. Дело в том что относительный путь к картинкам и файлам, которые вы подключаете на странице нужно составлять с учётом ЧПУ, так как каждый слэш (/) в адресе будет расцениваться как папка. В итоге относительные пути ЧПУ будут вида «../../». Рекомендуем вам почитать статьи о относительных адресах, если вы не знаете как составлять их иерархию в HTML. Если же вы не хотите заморачиться на этом или не понимаете о чём речь, просто выставьте везде абсолютные пути, т.е для картинок вместо:

В таком случае данные сайта будут вызываться корректно при любом ЧПУ, с любым количеством слешей. Точно также поступите со всеми подключаемыми файлами к HTML.

Настало самое время поговорить о втором варианте редиректа через .htaccess. Второй вариант полностью завязан на первом, но представляет собой универсальный редирект со стороны htaccess. Состоит редирект всего из одного правила:

RewriteRule ^([A-Za-z0-9-/]+)$ /engine.php?query=$1 [L]

Вся логика такого редиректа в том, что абсолютно всё после http://site.com/ будет отсылаться на обработчик engine.php в переменной $_GET[‘query’]. Далее мы в engine.php можем разбить переменную на части:

И теперь мы получили массив $url в каждой ячейке которого содержиться часть полного пути. Например, если наш адрес (переменная query) выглядит так: transport/auto/ferrary/laferrary/description, тогда после обработки будет:

Читать еще:  Рецепты правильного питания на каждый

И вы после обработки можете выполнять любые действия с этими данными.

И возможно пригодится: Для того чтобы узнать количество записей в массиве используйте count($url), для того чтобы посмотреть значение последней записи в массиве используйте end($url).

Руководство по настройке ЧПУ (Rewrite)

Подскажите парочку уроков по настройке ЧПУ на сайте.
Подскажите , пожалуйста, парочку уроков по настройке ЧПУ на сайте, а то я сам ничего дельного пока.

Какова вероятность того, что 2 из них нуждаются в общей настройке? Больше 2-х телевизоров нуждается в настройке?
В мастерскую для ремонта поступило 15 телевизоров. Известно, что 6 из них нуждаются в общей.

ЧПУ работает, но с админки перенаправляет без ЧПУ. Так и должно быть?
Здравствуйте. Версия Prectashop 1.6.0.9. Суть в том, что если я сразу перехожу по адресу.

Был сайт без ЧПУ, потом с «некрасивыми» ЧПУ
Сайт на Joostina. Сперва был без ЧПУ. Потом после индексации включили штатный ЧПУ Жустины. Там ЧПУ.

Не работает PostBack обработчик события с ЧПУ. Без ЧПУ работает
Хелп. Сам пишу на пхп, просто проект на АСП попался, решил поинтересоваться. Сделал на сайте ЧПУ с.

Несколько слов по поводу флагов, которые пишутся внутри квадратных скобок, стоящих после регулярного выражения. Основные и самые часто используемые это вот эти:

Для преобразования самые полезные L, QSA и E, а также иногда NC (зависит от правил). Остальные полезны для перенаправлений/статусов и т.п.
P.S. это не все флаги, их еще раза в два или три больше) Здесь только основные на мой взгляд.

Можно также указывать несколько флагов через запятую. К примеру, как в сообщении выше:
[L,QSA]
или вот еще ситуация когда нужно несколько
[R=301,L] — если не остановить преобразования (L) то они будут продолжать выполняться дальше. А это уже лишнее

По поводу RewriteCond. Она используется для указания условий, при которых выполняется правила RewriteRule. К примеру эти две строчки означают

что правила выполнятся только тогда, если нет этого файла или папки. Разберем буквы в конце

Если вначале (перед дефисом) поставить восклицательный знак, то будет отрицание (т.е. наоборот)
Чаще всего используют только -f и -d (вернее, !-f и !-d)

Ну и немного об самих переменных сервера — сами они пишутся внутри фигурных скобок, а перед ними ставится знак процента. Вкратце о них:

Правильно настраиваем чпу для сайта htaccess

ЧПУ htaccess

Всем привет. Сегодня мы с вами рассмотрим процесс создания ЧПУ ссылок через служебный файл htaccess. Итак, поехали!

ЧПУ расшифровывается как человеко-понятные url. То есть эти ссылки визуально имеют более упрощенную структуру. Примеры:

Эти ссылки по сути ведут на одну и ту же страницу, но имеют разную структуру. Согласитесь что ЧПУ ссылка по сравнению с обычной лучше воспринимается. В данном примере это реализовано за счет скрытия расширения файла и передаваемого параметра. Благодаря этому, такая ссылка содержит меньше символов и лучше индексируется поисковыми роботами. Ну да ладно! Теперь перейдем к созданию ЧПУ ссылок.

В примере мы будем преобразовывать ссылку типа https://mysite.com/news.php?id=54 в ЧПУ https://mysite.com/news/54.

Для этого нам понадобится создать служебный файл .htaccess.

Сразу скажу что этот файл не имеет названия и содержит только расширение htaccess.

Для создания нашей ЧПУ ссылки в самом файле htaccess нужно прописать всего две строчки.

Первой строчкой мы активизируем механизм mod_rewrite. Он дает возможность делать перенаправления с одного url адреса на другой. Во второй строчке мы пишем правило которое говорить что если в url встречается строка соответствующая первому шаблону регулярного выражения (^([a-z]+)/([0-9]+)/? ) ,то мы делаем перенаправление на второй шаблон ($1.php?id=$2). Третий параметром передается флаг L который служит для остановки текущей итерации обработки запроса.

Читать еще:  Правильно закрыть теплицу поликарбонатом

Во втором шаблоне у нас указаны $1 и $2 — это по сути подшаблоны первого шаблона которые указаны в скобочках.

$1 — соответствует подшаблону ([a-z]+)

$2 — соответствует подшаблону ([0-9]+)

То есть найденные соответствия подшаблонов первого шаблона подставляются во второй шаблон.

В результате отработки данного кода, если придет запрос по url https://mysite.com/news/54 ,то произойдет перенаправление на адрес https://mysite.com/news.php?id=54. И в итоге нам загрузится страница по адресу https://mysite.com/news.php?id=54, а url в адресной строке останется https://mysite.com/news/54.

Мы также можем спокойно менять передаваемый параметр id.

Здесь мы перейдем на ту же страницу, но уже с параметром ?id=23.

И еще с помощью данного правила мы можем переходить на любую другую существующую страницу которая на находится на том же уровне что и news.php, с передаваемым параметром id.

Здесь мы перешли на страницу test.php c параметром id=23 (https://mysite.com/test.php?id=23)

А здесь мы перейдем

на страницу user.php с параметром id=3 (https://mysite.com/test.php?id=23).

Вот в принципе и весь принцип построения ЧПУ ссылок. Просто в файле htaccess активируем механизм mod_rewrite и пишем правило по которому с одного url адреса соответствующего первому шаблону будет происходит перенаправление на адрес соответствующий второму шаблону.

На этом данная статья подошла к концу. Если остались вопросы пишите их в комментариях или группе

Я с вами прощаюсь. Желаю успехов и удачи! Пока.

Как правильно настроить .htaccess, для одновременной работы ЧПУ и landingSeo?

Здравствуйте! Для корректной работы плагина LandingSeo требуется прописать в .htaccess такие строчки:

Сайт на modx revo, и в его .htaccess уже имеется такой код, для работы ЧПУ:

Сайт одностраничный. Поэтому проблему не сразу заметил. При замене дефолтных строк, строчками от плагина — перестают работать все ресурсы(к примеру у меня в ресурсах: 404, sitemap, robots и тд.). Вернее при попытке перейти на них — попадаешь на главную страницу сайта. Плагин при этом работает исправно.
Если же вернуть строки на дефолтные, то работает ВСЕ, но при обновлении страницы, на секции с псевдоУрлами — выводится ошибка 404.

  • Вопрос задан более двух лет назад
  • 782 просмотра

Виктор Таран: в общем ваш вариант не сработал(вероятно какой-то знак лишний), зато сработал вот такой:

Очевидно, что MODx передает на фронт-контроллер запрос GET и обрабатывает его своим роутером. А ваш плагин хочет, чтобы все запросы шли прямо на index, без параметров.

Ковыряйте роутеры, возможно, где-то есть настройка этого параметра. Ну или можно переписать.

То есть я просто иду в любую папку ниже уровнем, создаю там .htaccess, прописываю в него такие строки:

и это должно сработать?

Список урлов и то что они должны выдавать

На самом сайте, после полной загрузки страницы, по секциям расставляются сеотайтлы, сеодескрипшоны, сеоурлы и тд., проблема в том, что при использовании дефолтных настроек modx, скрипт срабатывает, но при попытке перезагрузить страницу на одной из секций(почему то только кроме «главной страницы») вываливается ошибка 404.
По идее все перечисленные ресурсы, и вообще ресурсы в modx должны генерироваться динамически через админку, они существуют в бд, и при запросе клиенту выводится уже сгенерированый документ. Но в данный момент для решения проблемы, пришлось полностью пожертвовать динамическими ресурсами админки, в пользу статических файлов в корне сайта, только так я смог заставить их работать. Кроме того, пришлось пожертвовать страницей 404, потому что прописывание строки #ErrorDocument 404 helpmyapple56.ru/errors/404.html в .htaccess — ничего не дало. При возникновении ошибки, попадаешь на главную страницу сайта.

Ссылка на основную публикацию
Adblock
detector