Выбрать курс
6  /  17

Карты отличаются только доменом (более сложный способ)

Часто бывает так, что карта должна отличаться только доменом, при этом доменов могут быть сотни и они могут каждый день добавляться или удаляться. Следить за этим вручную крайне непросто, да и не нужно.

Создаем и настраиваем обычную карту сайта на основной домен, прописываем ей путь /sitemap/sitemap, как показано на скрине.

2020-10-03_16-34-34.png

Заходим на фтп, и удаляем из корня все файлы по маске sitemap*.xml (если их не удалить, в некоторых случаях может не работать).

Внимание!В данной статье рассматривается работа с кодом. Перед тем как что-то делать, сделайте полный бекап сайта, по ходу работы не забывайте делать бекап файлов которые правите.


Создаем файл sitemapController.php в корне сайта, меняем первую строку на Ваш домен, прописанный в настройках карты сайта:

<?
$mainDomain = 'https://solverweb.ru'; //Заменить на свой
 
$host = htmlspecialchars($_SERVER['SERVER_NAME']);
if(strpos($_SERVER["REQUEST_URI"],'../') !== false) die('');
 
if ((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") || (isset($_SERVER["HTTP_X_FORWARDED_PROTO"]) && $_SERVER["HTTP_X_FORWARDED_PROTO"] == "https") || (isset($_SERVER["HTTP_X_FORWARDED_SCHEME"]) && $_SERVER["HTTP_X_FORWARDED_SCHEME"] == "https")){
	$protocol = "https";
}
else{
	$protocol = "http";
}
 
 
$curDomain = $protocol."://".$host;
 
$sitemapsPath = '/sitemaps/www';
$path = $_SERVER['DOCUMENT_ROOT'] . $sitemapsPath . $_SERVER["REQUEST_URI"];
 
if (file_exists($path))
{
        header('Content-Type: text/xml; charset=utf-8');
	$current = file_get_contents($path);
	$current = str_ireplace($mainDomain, $curDomain, $current);
	echo $current;
}else {
	include $_SERVER['DOCUMENT_ROOT']. "/404.php";
}
Если у Вас Apache, вносите в .htaccess после 
RewriteEngine On
следующее:
RewriteRule ^sitemap(.*).xml$ /sitemapController.php [L]
Если у Вас nginx, вносите в server {} (пожалуйста, убедитесь что у Вас хватает компетенции, если нет, пишите нам, не нужно ломать сервер)
location / {
    rewrite ^/sitemap(.*).xml$ /sitemapController.php break;
}
На этом все. Если разобраться не получается, не отчаивайтесь, пишите в поддержку, мы поможем.