Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!
Кстати да.
На семинаре упоминалось, что можно использовать свойство "Код" инфоблоков, для создания "читаемых" ссылок, а вот ни на форуме ни в разделе FAQ никакой инструкции найти не удалось :(
Я подозреваю, что таких вопросов в техподдержку идет не мало, так почему бы один раз для нас всех примерчик не написать? А?
1. в настройках инфоблока выставить соответствующую галочку, чтобы вместо ?ID=1234 было 1234.php
2. в демо-версии есть файлы-обработчики 404.php - в покапаться в них
3. в .htaccess писать
ErrorDocument 404 404.php
и никаких mod_rewrite. Хотя с ним, наверное, проще, дело вкуса.
Анатолий Зайченок пишет:
при mod_rewrite поле CODE из элементов инфоблоков не вытянешь и ?ID=1234 на /xxxx/ не заменишь.
Поле CODE как раз и нужно использовать. Он есть и для разделов и для элементов.
/artiles/php/array/ легко трансформируется в
arcticles.php?SECTION=php&ID=array
Вместо ссылок вида www.myserver.ru/catalog/list.php?SECTION_ID=431&PRODUCT_ID=3789 хочу иметь такие www.myserver.ru/catalog/mobile/nokia_3310/
-Решение-
1. Создание поддиректорий
Самый простой способ - это создать для каждого раздела/статьи поддиректорию и поместить туда файл index.php. Использовать данный метод имеет смысл на сайтах с небольшой структурой.
2. Обработка 404 ошибки
В файл .htaccess пишем:
ErrorDocument 404 /404.php
Эта строка указывает серверу перенаправить запрос на скрипт /404.php, если запрошенный файл не был найден. Когда пользователь наберет несуществующий адрес www.myserver.ru/catalog/mobile/nokia_3310/, сервер перенаправит запрос на скрипт 404.php со всеми переменными окружения. В $_SERVER["REQUEST_URI"] будет содержаться запрошенный пользователем URI (/catalog/mobile/nokia_3310/). Остается только "вытащить" из строки '/catalog/mobile/nokia_3310/' необходимые идентификаторы.
Однако страница 404 будет выдавать браузеру заголовок "HTTP/1.1 404 Not Found", а страницы с таким заголовком не индексируются поисковиками, поэтому в начале файла 404.php пишем:
header("HTTP/1.1 200 OK");
Минусов у данного способа два: а) нельзя посылать на несуществующий URL данные методом POST б) Лог ошибок сервера будет забит (необходимо либо отключить ведение лога, либо периодически его чистить).
3. Модуль Apache mod_rewrite
В файле .htaccess с помощью регулярных выражений прописываются правила, по которым Apache должен сделать соответствующие перенаправления. Например,
RewriteEngine On
RewriteBase /
RewriteRule ^catalog/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$ catalog/list.php?SECTION=$1&PRODUCT=$2
Каждый запрос Apache будет сопоставлять с шаблоном '^catalog/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/?$' и в случае совпадения (например, пользователь набрал www.myserver.ru/catalog/mobile/nokia_3310/) перенаправит запрос на скрипт /catalog/list.php, в котором переменная $_GET["SECTION"] будет равна 'mobile', а $_GET["PRODUCT"] - 'nokia_3310'.
Теперь запросы, удовлетворяющие маске "^([^\.]+)$" (все запросы, кроме тех, что содержат точку) будут перенаправляться на скрипт handler.php. Маски для файлов можно задать и другие, разумеется. Этот способ позволяет передавать данные методом POST.