Сегодня на собственно опыте обнаружил баг в этом способе.
Смотрим в самый первый пост в этой теме:
Kotoff писал(а):
Для начала надо определиться с соответствиями старым страницам новых. Из этих соответствий нужно сделать массив:
<?
$redirects['/index.php?id=nasosy'] = '/nasosy/';
$redirects['/index.php?id=nasosy2'] = '/nasosy/';
$redirects['/index.php?id=nasosy2&sub=bytovye'] = '/nasosy/bytovye/';
$redirects['/index.php?id=motory'] = '/motory/';
?>
Очень важно, чтобы после закрывающего тега php
?>
ничего не было - ни пробелов, ни переводов строки, никаких других символов!
А у меня после "?>" оказалась еще одна пустая строка. На обычных html-страничках это не сказалось, зато нарушило работу экспорта в Яндекс-маркет. Этот перевод строки выводился первым символом в отдаваемый в Я.Маркет yml-файл, из-за чего Маркет отказывался этот файл парсить, мотивируя отказ тем что первым символом xml-документа должен быть знак начала тега < а никак не символ перевода строки.
Но следить за наличием пустых строк в конце файла это не очень удобное решение проблемы.
Гораздо удобнее просто не ставить закрывающий тег php! И тогда все пустые строки до конца файла будут считаться частью php-сценария и не будут выдаваться в код, генерируемый CMS.
Ну и еще хороший стиль программирования требует явного определения массива $redirects.
Таким образом, наш файл с редиректами должен выглядеть так:
<?php
$redirects = array();
$redirects['/index.php?id=nasosy'] = '/nasosy/';
$redirects['/index.php?id=nasosy2'] = '/nasosy/';
$redirects['/index.php?id=nasosy2&sub=bytovye'] = '/nasosy/bytovye/';
$redirects['/index.php?id=motory'] = '/motory/';