Поделюсь кодом со своего сайта, а вообще надо самим решать такие задачи, полезно для мозгов
. Здесь еще правильно отдает коды 301 и 404 для поисковика.
Поменяйте IBLOCK_ID на свой. Положите файл в корень и назовите, например, redirect_news_elements.php
Код |
---|
<?
// Скрипт выполняет перенаправление со старых url-ов на новые
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
CModule::IncludeModule("iblock");
$res = CIBlockElement::GetList(
$arOrder = Array(),
$arFilter = Array(
"IBLOCK_ID" => 15,
"ID" => $_GET['ID']
),
$arGroupBy = false,
$arNavStartParams = false,
$arSelectFields = Array()
);
if($ar_res = $res->GetNextElement()) {
$arFields = $ar_res->GetFields();
CHTTP::SetStatus("301 Moved Permanently");
header("Location: ".$arFields["DETAIL_PAGE_URL"]);
} else {
CHTTP::SetStatus("404 Not Found");
@define("ERROR_404","Y");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Страница не найдена");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
}
?>
|
После в "Обработка адресов" добавить правило (все поля по порядку):
Код |
---|
#^/news/([0-9]+)/#
bitrix.news
/redirect_news_elements.php
ID=$2 |
Родное правило должно стоять после этого, поэтому его нужно изменить (учтите, при сохранении настроек компоненты bitrix.news, если вы его редактируете через html-редактор, это всё будет каждый раз слетать):
Код |
---|
#^/news/?#
bitrix.news
/news/index.php -- поменять на правильный путь
(пусто)
|