- Не работают ЧПУ в битриксе: 3 причины
- Bitrix — UrlRewrite (feat. Juggernaut)
- INTRO
- Кстати про Juggernaut
- UrlRewrite by Bitrix
- UrlRewrite by Slim
- UrlRewrite by Juhhernaut
- Не срабатывает редирект для страниц сайта для которых настроена обработка адресов в файле urlrewrite.php
- Обработка адресов
- Понятие обработки адресов
- Правила обработки
- Подключение системы обработки адресов
- Поддержка компонентов 2.0
- Смотрите также
- Пользовательские комментарии
Не работают ЧПУ в битриксе: 3 причины
При разработке магазина на битриксе достаточно часто возникают сложности с настройкой ЧПУ на сайте. Не столь важно, в компоненте ли каталога, новостей, или же каких-либо иных. Казалось бы, настройка ЧПУ по документации битрикса достаточно тривиальна, и там не может что-то пойти не так. Однако, опыт автора настоящей статьи, и те форумы, куда автор обращался за решением, говорят об обратном. Проблема существует и достаточно актуальна.
Ниже представлены 3 самые распространенные причины того, почему могут не работать настройки ЧПУ в битриксе. Причем могут не работать ЧПУ для всех типов страниц компонента, или же только для детальных страниц. Итак, причины могут быть следующими:
- Неправильные настройки ЧПУ в настройках инфоблока и компонента
- Ошибки в urlrewrite.php
- Некорректные правила в .htaccess
Следует рассмотреть каждую причину детально.
1. Неправильные настройки ЧПУ в инфоблоке и компоненте
Данная причина является самой простой по своему характеру и самой легкой в исправлении. Собственно, диагностику корректности настройки ЧПУ на сайте нужно начать с этого шага.
Подробное описание о том, как настроить ЧПУ для компонента можно найти в справке (учебных курсах) битрикса. Однако, в качестве примера, хотелось бы привести наиболее типичные настройки ЧПУ для каталога товаров в интернет-магазине:
Шаг А. Настройки ЧПУ в инфоблоке
На вкладке настроек инфоблока ( “Контент” > “Инфоблоки” > “Типы инфоблоков” > Далее индивидуально ) указываем:
Шаг Б. Настройки ЧПУ в компоненте каталога
В настройках компонента, на вкладке “управление адресами страниц”, указываем:
Сохраняем изменения, сбрасываем кеш, проверяем результат. Если ЧПУ не работают, переходим к шагу 2.
2. Проблемы с файлом urlrewrite.php
Говоря простыми словами, urlrewrite.php, лежащий в корне сайта — это файл, в котором содержатся правила, в которых сообщается серверу о том, как обрабатывать тот, или иной файл.
В самом деле, может быть несколько причин, почему правила, записанные в urlrewrite, могут работать некорректно:
- Нарушена очередность правил
- Ошибка сохранения при перезаписи файла CMS
- CMS, при сохранении настроек компонента перезаписала настройки, ранее внесенные в файл руками
- Ошибки в путях, синтаксисе и т.д.
Источник
Bitrix — UrlRewrite (feat. Juggernaut)
Продолжаем лупить статьи на тему «Битрикс не так уж и плох, если его доработать».
На этот раз разговор пойдет на тему «url_rewrite», потому как я считаю, что текущий вариант вообще не идеален.
А идеальным я считаю вариант маршрутизации в микрофреймворках, например Slim (или тот же Lumen), вообщем тех, которые дружат с PSR-7.
Кому интересно, го под кат.
Кому не интересно, ну тут уж сами решайте 😉
INTRO
На самом деле мои предыдущие статьи носили более менее абстрактный характер (ну кроме статьи про Juggernaut пожалуй), поэтому в данном посте постараюсь меньше писать теории и побольше кода.
Кстати про Juggernaut
Документация будет в скором времени, к сожалению есть некоторые преграды:
- время
- рефакторинг
- мне полюбился TDD, так что рефакторинг остановился до тех пор пока не напишу тесты
- направление развитие библиотеки как оказалось я не совсем еще до конца определил
Но это как говорить «совсем другая история», поэтому вернемся к тому, о чем собственно данная статья: роутинг.
UrlRewrite by Bitrix
Порядок маршрутизации я думаю лучше изобразить схемкой (и понятно, и наглядно):
Что это все значит:
include bitrix/urlRewrite.php
Подключаем файл который занимается маршрутизацией (ну это я думаю и так все поняли).
Вообще данный пункт (и все что выше на блок схеме) — это заслуги .htaccess:
fix request_uri for IIS
Данный пункт, судя по комменту в коде, ответственен за какие то косяки IIS (бедняга MS), за какие я не в курсе, но логика следующая:
если QUERY_STRING имеет вид «wtf=404;http(s)://wtf.ru», то все GET параметры запроса чистятся и данная конструкция убирается из адреса.
На вопрос «что проиходит?» я не могу дать ответа, так что едем дальше.
include dbconn.php
Подключаем базу.
Зачем? Непонятно, т. к. запросов к базе дальше нет и работа идет только с файловой системой.
Я конечно не опускался в реализацию классов для работы с файлами, но если им нужно что-либо от базы, то это не иначе как печально 🙁
decode request page (for UTF-8)
Все понятно из названия, кодирование REQUEST_URI.
Зачем? Зачем Битрикс любит Windows-1251? Без понятия. Но это будет продолжаться вечно (и это инсайдерская информация).
include /urlRewrite.php
Собственно подключаем сами правила маршрутизации.
process Url
Немного странные действия, но все же происходит следующее:
Если есть GET параметр SEF_APPLICATION_CUR_PAGE_URL, то приравниваем REQUEST_URI к его значению, а затем переписываем все зависимые переменные и глобальные массивы ($_GET, $_SERVER, …)
process urlRewrite
О, да!
Мы до него добрались.
Собственно что происходит:
- Парсим параметр CONDITION.
- Заменяем параметр CONDITION на RULE в REQUEST_URI
- Добавляет в $_GET и $_REQUEST переменные из правила маршрутизации.
- Проверяем существует ли указанный файл, валидный ли у него путь и не является ли он административным (upload, bitrix, bitrix/services, bitrix/groupdavphp).
- Если все ок, то подключаем.
Меня одного смущает что проверка идет после того как мы уже сунули все параметры в глобальные переменные?
Много неясностей, зачем сделано так, а не иначе?
Ну и много неясностей, зачем вообще это сделано?
Так что теперь перейдем к идеальному варианту Slim’a.
UrlRewrite by Slim
Как делает этот замечательный фреймворк:
Легко и непринужденно цепляемся к нужному действию, с нужным маршрутом, параметрами и реализацией.
UrlRewrite by Juhhernaut
Ну, а теперь пробуем все это миксануть.
Выкидываем из Slim’a указание метода и собственно реализацию действия, вместо нее будет путь до файла.
Для начала обозначим синтаксис привязки маршрутов к реальным физически файлам (по факту это является мануалом использования):
По факту, если реализацию маршрутов оставить на совести компонентов, то достаточно будет прописать следующую конструкцию (да, так тоже можно 😉 ):
Данный файл нужно (можно) назвать urlrewrite.php, кинуть его в папку /local/ и внести правки в .htaccess файл, который лежит в корне.
И собственно все. Простой и понятный роутинг у вас в кармане.
Источник
Не срабатывает редирект для страниц сайта для которых настроена обработка адресов в файле urlrewrite.php
Разработчик осуществил перенос сайта с одной CMS на другую. В итоге в корне сайта появился файл urlrewrite.php отвечающий за обработку адресов. Было принято решение настроить 301 редирект что бы сайт был доступен по адресу . Осуществив настройку файла .htaccess. Сайт начал открываться как надо — единственная проблема с которой я столкнулся эта страницы сайт для которых заданы условия в файле urlrewrite.php при переходе на них открывается следующая страница с картой сайта.
Вот часть кода с файла urlrewrite.php
Помощь в написании контрольных, курсовых и дипломных работ здесь.
ЧПУ: лучший вариант для адресов страниц сайта
Думаю суть вопросы понятна, хотелось бы услышать ваши комментарии. Конечно же мы говорим об.
301 редирект для нескольких страниц сайта
Приветствую! Немного о пациенте. Стоит nginx/0.7.65. Необходимо настроить 301 редирект с.
Файл htaccess: подмена страниц сайта для определеных диапазонов IP адресов
Добрый день! сразу хочу сказать, я не разбираюсь в PHP и Apache и эти программы у меня не.
Про редирект в файле .htaccess для сайта на html
Здравствуйте уважаемые гуру, пишу вам из далекого села 🙂 Делаю сайт на чистом html.
301 редирект для всех страниц
Есть страницы вида site.ru/folder/page.php?id=10 site.ru/folder/list.php?id=10 хотел их.
301 редирект для страниц с GET запросами
Здравствуйте, подскажите как правильно организовать редирект со страницы вида.
Редирект со всех страниц сайта
Как сделать постоянный редирект со всех страниц одного сайта на одну страницу другого? То есть.
Редирект отдельных страниц сайта
Есть 2 домена. Был переделан сайт 1.ru — старый сайт 2.ru — новый сайт Я хочу на каждую.
MVC: организация и обработка адресов для новостей
Добрый вечер! Допустим, есть контроллер news. У него есть два метода, list и one. Первый выводит.
Источник
Обработка адресов
Понятие обработки адресов
Обработка адресов (UrlRewrite) применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указаному адресу. Например, можно задать настройки обработки адресов, чтобы скрипт в файле /fld/c.php, отвечающий по адресу
отвечал также по адресу
Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.
Правила обработки
Правила обработки адресов настраиваются отдельно для каждого сайта и хранятся в корне сайта в файле urlrewrite.php. Файл содержит массив $arUrlRewrite, каждая запись которого является правилом обработки адреса. Файл urlrewrite.php имеет следующий вид:
Каждое правило должно содержать уникальное в рамках сайта условие выполнения правила. Условие выполнения записывается в ключ «CONDITION» массива и является шаблоном Perl-совместимого регулярного выражения. Например, условие:
указывает, что данное правило должно применяться для всех адресов, которые начинаются с подстрок вида:
Правило может содержать адрес физически существующего скрипта, который будет подключен при выполнении условия. Этот адрес записывается в ключ «PATH«. Например, если в системе обработки адресов зарегистрировано правило:
и пользователь запросил страницу:
которая физически не существует, то система обработки адресов подключит скрипт:
Правило может содержать правило замены, которое записывается в ключ «RULE«. Если правило замены установлено, то адрес реально существующего подключаемого скрипта формируется заменой регулярным варажением условия выполнения (шаблона выражения) на конкатенацию физического пути (ключ «PATH«) и правила замены (ключ «RULE«). Например, если в системе обработки адресов зарегистрировано правило:
и пользователем запрошена страница:
то для формирования адреса скрипта, который будет подключен, выполнится код:
и будет подключен скрипт:
Если в системе обработки адресов зарегистрировано правило:
и пользователем запрошена страница:
то для формирования адреса скрипта, который будет подключен, выполнится код:
и будет подключен скрипт:
Правило может содержать имя компонента, который создал это правило. Это имя записывается в ключ «ID«. При автоматическом пересоздании файла правил urlrewrite.php с помощью средств административной части сайта пересоздаются только правила, у которых заполнен ключ «ID«. Эти правила пересоздаются на основании анализа физических файлов в папке сайта. Правила с пустым ключом «ID» при автоматическом пересоздании файла правил не изменяются.
Подключение системы обработки адресов
Перед началом использования система обработки адресов должна быть подключена на сайте. Для этого необходимо:
- если у вас на веб-сервере настроена обработка ошибки 404 (например, для Apache установлена директива ErrorDocument 404 /404.php ), то вы должны изменить файл /404.php, вставив в самое начало файла команду:
- если вы для Apache используете модуль mod_rewrite, то в его настройках вы можете указать (например, как в штатной установке в файле .htaccess):
Примеры правил и условий для модуля mod_rewrite
- Настройка переадресации (301 редирект) на папки со слешем ( / ) в конце:
- Переадресация (301 редирект) с индексной страницы index.php на саму папку (корень) для всех страниц сайта:
Поддержка компонентов 2.0
При добавлении на страницу компонента с поддержкой ЧПУ («человеко-понятный URL«) (если файл сохраняется с помощью API), автоматически создаётся правило обработки адреса. Если страница создаётся не с помощью API, а, например, записывается через FTP, то необходимо выполнить пересоздание правил (кнопка на панели инструментов на странице настройки правил обработки адресов).
Поддержка ЧПУ включается в компоненте с помощью предопределённого входного параметра SEF_MODE. При этом в предопределённом входном параметре SEF_FOLDER устанавливается папка, в которой работает компонент. Папка может быть виртуальной (т.е. физически может не существовать). При сохранении страницы с размещённым на ней компонентом, переключенным в режим ЧПУ (параметр SEF_MODE равен Y), через стандартный интерфейс правило обработки адресов создаётся следующим образом: в ключ условия применения шаблона («CONDITION«) записывается регулярное выражение, полученое из папки в параметре SEF_FOLDER, в ключ «ID» записывается имя компонента, в ключ пути («PATH«) записывается физический адрес страницы.
Например, пусть компонент «bitrix:catalog» размещён на странице /fld/c.php и его подключение выглядит следующим образом:
Тогда при сохранении страницы /fld/c.php в системе обработки адресов добавится запись:
Таким образом, при запросе адресов, начинающихся со строки /mycatalog/, будет подключаться скрипт /fld/c.php. В этом скрипте запрошенный адрес может быть проанализирован и выполнены требуемые действия.
Смотрите также
- ЧПУ в курсе Администратор Базовый.
- Настройка ЧПУ в курсе Разработчик Bitrix Framework.
- Работа комплексного компонента в SEF режиме в курсе Разработчик Bitrix Framework.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Цитата |
---|
Борис Байзулаев пишет: Адрес физического файла, подключенного в результате обработки адреса записывается в Код $_SERVER[«REAL_FILE_PATH»] |
Упрощенный вариант правила, решающий проблему, описанную Денисом Мальцевым в предыдущем комментарии.
Одна интересная особенность, которую надо учитывать.
Допустим вам надо сделать преобразование такого вида, чтобы при открытии страницы /news/445.php происходило преобразование в /news/detail.php?ID=445
Можно использовать такое правило
Оно даже будет работать, но ровно до тех пор пока в строке не появятся дополнительные параметры. Например пользователь перешел с внешнего ресурса и в URL была добавлена метка для Google Analitics, запрошенный URL получился примерно такой /news/445.php?utm_source=google. Вместо текста новости вы увидите сообщение «Элемент не найден», потому что в результате преобразования получился такой адрес /news/detail.php?ID=445?utm_source=google.
Ниже приведен код, решающий эту проблему:
Задача : Выполнить 301 редирект с одного домена на другой, чтобы любой адрес домена olddomain вёл на тот же адрес, но в домене newdomain.
Решение :
В файл .htaccess прописать правило:
Источник