Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

И еще раз про ЧеловекоПонятный УРЛ ( ЧПУ)

00 голосов
7
Я видел здесь на форуме пару сообщений про ЧПУ, но они толком не описывают как это сделать, и в сявзи с этим я решил еще раз поинтересоваться как сделать ссылку ( url ) красивой и понятной. Если никто не может рассказать как сделать url таким
"http://www.bitrixsoft.ru/support/news/razvedka/"
-->> то подскажите хотя бы как сделать url вот
таким -->>
"http://www.bitrixsoft.ru/support/news/razvedka.html"
спросил 27 Июль, 13 от Kania (5,180 баллов)

7 Ответы

00 голосов
MOD Rewrite, Яндекс.
Всё.
ответил 27 Июль, 13 от Klark (140 баллов)
00 голосов
Кстати да.
На семинаре упоминалось, что можно использовать свойство "Код" инфоблоков, для создания "читаемых" ссылок, а вот ни на форуме ни в разделе FAQ никакой инструкции найти не удалось :(
Я подозреваю, что таких вопросов в техподдержку идет не мало, так почему бы один раз для нас всех примерчик не написать? А?
ответил 22 Сен, 13 от salo (840 баллов)
00 голосов
mod rewrite - хорошее средство :)
ответил 21 Дек, 13 от Wildberry (120 баллов)
00 голосов
Юрий
при mod_rewrite поле CODE из элементов инфоблоков не вытянешь и ?ID=1234 на /xxxx/ не заменишь.
ответил 05 Апр, 14 от salo (840 баллов)
00 голосов
1. в настройках инфоблока выставить соответствующую галочку, чтобы вместо ?ID=1234 было 1234.php
2. в демо-версии есть файлы-обработчики 404.php - в покапаться в них
3. в .htaccess писать
ErrorDocument 404 404.php

и никаких mod_rewrite. Хотя с ним, наверное, проще, дело вкуса.
ответил 29 Июль, 14 от shippuden (220 баллов)
00 голосов
Цитата
Анатолий Зайченок пишет:
при mod_rewrite поле CODE из элементов инфоблоков не вытянешь и ?ID=1234 на /xxxx/ не заменишь.


Поле CODE как раз и нужно использовать. Он есть и для разделов и для элементов.
/artiles/php/array/ легко трансформируется в
arcticles.php?SECTION=php&ID=array
ответил 02 Дек, 14 от Sazragore (500 баллов)
00 голосов
Вместо ссылок вида 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'.

4. Директива FilesMatch
В .htaccess пишем:
Action throw /handler.php
<FilesMatch "^([^\.]+)$">
ForceType throw
</FilesMatch>

Теперь запросы, удовлетворяющие маске "^([^\.]+)$" (все запросы, кроме тех, что содержат точку) будут перенаправляться на скрипт handler.php. Маски для файлов можно задать и другие, разумеется. Этот способ позволяет передавать данные методом POST.
ответил 26 Март, 15 от Sazragore (500 баллов)

Похожие вопросы

0 голосов
4 ответов
спросил 19 Дек, 13 от maxdj (480 баллов)
0 голосов
3 ответов
спросил 14 Окт, 13 от Manakus (160 баллов)
0 голосов
7 ответов
0 голосов
8 ответов
спросил 20 Июнь, 13 от Fierce88 (440 баллов)
0 голосов
5 ответов