Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
1

Настройка 301 редиректа для ЧПУ страниц

16.05.2017, 16:51. Просмотров 2598. Ответов 23
Метки нет (Все метки)

У меня такая проблема. Интернет магазин на битриксе, переезжаем на ЧПУ страницы.
Была структура на примере одного раздела - site.ru/catalog/375
Новая структура - site.ru/catalog/name
Таких разделов около 2 тыс.
Как можно настроит 301 редирект, чтоб не прописывать отдельно для каждой страницы в .htaccess такой код:
Redirect 301 /catalog/375 http://site.ru/catalog/name
Вручную прописывать все слишком долго и нагружать файл не хочется такими большим записями.

Формирование страниц каталога раньше происходило на основании ID раздела каталога, теперь будет на основании символьного кода названия каталога.
В битриксе они отображаются как #SECTION_ID# и #SECTION_CODE#
Буду очень благодарен за помощь
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2017, 16:51
Ответы с готовыми решениями:

Настройка чпу для самописного скрипта
Каким образом настроить обработку адресов для самописного скрипта??? На сайте есть каталог -...

Правильный 301 редирект после ЧПУ с ID на CODE
Сайт имеет структуру site.ru/catalog/category_id/product_id/ Я хочу сделать структуру...

Настройка ЧПУ
Доброго дня! Прошу помощи знатаков битрикс. Настраиваю ЧПУ (меняю "ID" на "CODE" в настройках...

Каталог, настройка чпу
Добрый вечер. Пытаюсь создать простой каталог, но пока не получается, хотя колдую уже не первый...

Настройка редиректа для некоторых страниц
Добрый день! Нужно сделать редирект с https на http для всех страниц сайта (для того чтобы...

23
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
16.05.2017, 17:47 2
Если идет обращение к URL со шаблоном /catalog/\d+ направляйте на специальный скрипт который будет по id находить код. И формировать нужный 301 редирект
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
16.05.2017, 20:26  [ТС] 3
Интересует если ли возможность без скрипта прописать такой редирект свойствами .htaccess
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
16.05.2017, 22:36 4
Конечно же нет. Веб сервер понятия не имеет о том, что творится в вашей БД. Да и вообще о существовании бд. Как он может заменить id на код? Не нравится предkоженный вариант, тогда напишите скрипт и сгенерируйте правила для htaccess скриптом...
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
17.05.2017, 00:25  [ТС] 5
В скриптах не силен, возможно есть где то уже готовое решение, и можно посмотреть как это настроить?
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
17.05.2017, 01:17 6
Лучший ответ Сообщение было отмечено Andrevv как решение

Решение

Думаю что готового нет...
Попробуйте так - вроде должно сработать
.htaccess
Bash
1
2
3
4
5
6
<IfModule mod_rewrite.c>
    RewriteEngine On  
    RewriteCond %{SCRIPT_FILENAME} !-d  
    RewriteCond %{SCRIPT_FILENAME} !-f  
    RewriteRule ^catalog/(\d+)/$ /local/tools/redirect.php?p=$1 [L]
</IfModule>
Файл /local/tools/redirect.php
Код рассчитан что у вас Битрикс 14.0 или новее
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
use Bitrix\Main\Application; 
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_STATISTIC", true);
require_once($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/main/include/prolog_before.php');
 
$IBLOCK_ID = 1; // ИД вашего ИБ каталога
 
$request = Application::getInstance()->getContext()->getRequest(); 
$id = intval($request->getQuery("p"));
if (\Bitrix\Main\Loader::includeModule('iblock') && $id > 0) {
    $resElement = \Bitrix\Iblock\ElementTable::getList(array(
        'filter' => array(
            'IBLOCK_ID' => $IBLOCK_ID,
            'ID' => $id
        ),
        'select' => ['CODE']
    ));
    $arElement = $resElement->fetch();
    if ($arElement) {
        $url = str_replace(
            '/catalog/'.$id.'/', 
            '/catalog/'.$arElement['CODE'].'/',
            $APPLICATION->GetCurPageParam('',array('p'))
        );
        LocalRedirect($url);
    }
}
// Адрес вашей страницы 404
LocalRedirect("/404.php", "404 Not Found");
1
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
23.05.2017, 23:14  [ТС] 7
Сделал все точно по инструкции выдает ошибку на странице
Parse error: syntax error, unexpected '[' in /home/c/ci66344/public_html/local/tools/redirect.php on line 17
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
23.05.2017, 23:24 8
очевидно у вас php версии 5.4 например поменяйте
PHP
1
select' => ['CODE']
на
PHP
1
select' => array('CODE')
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
23.05.2017, 23:35  [ТС] 9
изменил, ошибка пропала но редирект идет на 404 страницу(
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
23.05.2017, 23:45 10
закомментируйте пока строку с редиректом последним. И расставьте код
PHP
1
echo __LINE__."<br>";
после строк (нумерация по моему коду приведенному выше) 6, 10, 11, 19, 20, 21

а так же после первой строки:
PHP
1
2
3
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
И покажите вывод
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
24.05.2017, 00:06  [ТС] 11
echo __LINE__."<br>"; добавлять нужно с новой строки?
вывод получился:
Parse error: syntax error, unexpected T_ECHO, expecting ')' in /home/c/ci66344/public_html/local/tools/redirect.php on line 31

Добавлено через 8 минут
добавил все в одну строчку ошибка:
Parse error: syntax error, unexpected T_ECHO, expecting ')' in /home/c/ci66344/public_html/local/tools/redirect.php on line 24
24 строка у меня $url = str_replace(echo __LINE__."<br>";
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
24.05.2017, 07:55 12
не не не.... внутрь команды не надо ее вбивать. например "после 21" это значит
PHP
1
2
3
4
5
6
7
if ($arElement) {  // это была 21 строка в листинге  выше
        echo __LINE__."<br>";
        $url = str_replace(
            '/catalog/'.$id.'/', 
            '/catalog/'.$arElement['CODE'].'/',
            $APPLICATION->GetCurPageParam('',array('p'))
        );
Добавлено через 6 часов 23 минуты
только обрати внимание... я ошибся 20 строка а не 21
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
24.05.2017, 13:59  [ТС] 13
сделал, вот вывод:
9
13
14
22

Добавлено через 5 минут
строки все сместились на 3 позиции получается из этого списка
"после строк (нумерация по моему коду приведенному выше) 6, 10, 11, 19, 20, 21"
вывелись 6, 10, 11, 19, а 20 не вывелась, 21 я не вбивал
http://c2n.me/3KHEGF0.png
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
24.05.2017, 17:06 14
У вас ИД инфоблока 1 или просто вы скопировали отсюда?
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
24.05.2017, 17:28  [ТС] 15
у меня несколько инфоблоков раньше тестировал 1 забыл поменять, сейчас 7 изменил, вывод тот же
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
24.05.2017, 19:26 16
Вы пробуете перейти по URL вида site.ru/catalog/375 .... У вас есть в инфоблоке с ИД 7 товар имеющий ИД 375 (цифра из урл)?
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
24.05.2017, 20:24  [ТС] 17
Когда я писал задачу то хотел ее применить к одному сайту, но сейчас немного переигралось, применяю к другому, цифру 375 взял примерную, на самом деле у меня там двух значение цифры но разве это имеет значение? вместо catalog у меня также другой инфоблок, но по вашему коду я его изменил в скрипте и в самом редиректе, если нужно могу в скриншотах показать структуру с ИД
0
voral
918 / 615 / 135
Регистрация: 16.03.2008
Сообщений: 2,923
24.05.2017, 21:10 18
Важна не структура,
А наличия того элемента, который хотите увидеть. Т.е. берем ваш пример: site.ru/catalog/375 из этого урл мы должны как то понять, что показать. Т.е. 375 (и любая другая цифра на этом месте) должна нам явно указать на конкретный товар. В моем решении поиск осущестляется по известным ИД инфоблока и ИД товара. При этом последний берется из урл.


Если же вы перенесли товары на новый сайт и там уже у того же самого товара другой ИД. Значит надо их как либо связать. Например сохранить ИД со старого сайта в специальном свойстве и искать уже по нему.
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
30.05.2017, 09:27  [ТС] 19
Добрался и сделал на том сайте что описывал ранее редиректы работают но почему то некорректный поиск по ID может потому что он у меня 5 значный а не трех?

Добавлено через 23 минуты
Подставляется элементы а не разделы, у меня разделы и элементы есть с повторяющими ID
вот пример как было и и как должно быть ссылка для раздела:
site.ru/catalog/12345 - site.ru/catalog/name
ссылка для элемента:
site.ru/catalog/12345/12345 - site.ru/catalog/name/12345

Подозреваю что в скрипте нужно просто как то элементы на разделы заменить подскажите что и как?
0
Andrevv
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 30
30.05.2017, 09:35  [ТС] 20
Вот скрин инфоблока
0
Миниатюры
Настройка 301 редиректа для ЧПУ страниц  
30.05.2017, 09:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2017, 09:35

Настройка 301 Редиректа
Проблема такая: провожу анализ сайта http://budynok.by онлайн-сервисом sitechecker.pro. данный...

Настройка редиректа 301
Вроди настроил редирект, но есть такая проблема: Сайт был перенесен с Joomla на Bitrix. Сделали...

Настройка 301 редиректа (mod_rewrite)
Добрый день всем. Как правильно настроить 301 редирект сайта на html, через .htaccess? Где тут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru