Часто бывает так, что карта должна отличаться только доменом, при этом доменов могут быть сотни и они могут каждый день добавляться или удаляться. Следить за этим вручную крайне непросто, да и не нужно.
Создаем и настраиваем обычную карту сайта на основной домен, прописываем ей путь /sitemap/sitemap, как показано на скрине.
Заходим на фтп, и удаляем из корня все файлы по маске sitemap*.xml (если их не удалить, в некоторых случаях может не работать).
Создаем файл sitemapController.php в корне сайта, меняем первую строку на Ваш домен, прописанный в настройках карты сайта:
<?php
class sitemapRegion {
private $mainDomain;
private $curDomain;
private $curProtocol;
private $sitemapDir;
public function __construct()
{
$this->setCurDomain();
$this->setCurProtocol();
}
private function setCurDomain()
{
$site = explode(":",$_SERVER["HTTP_HOST"])[0];
$this->curDomain = $site;
}
private function setCurProtocol()
{
if ($this->isHttps()){
$protocol = "https";
} else {
$protocol = "http";
}
$this->curProtocol = $protocol;
}
public function setMainDomain($mainDomain)
{
$this->mainDomain = $mainDomain;
return $this;
}
public function setSitemapDir($sitemapDir)
{
$this->sitemapDir = $sitemapDir;
return $this;
}
/* REQUEST_URI должен четко задаваться в .htaccess, тут он не проверяется */
private function getSitemapPath()
{
return $_SERVER['DOCUMENT_ROOT'].rtrim($this->sitemapDir,'/').$_SERVER["REQUEST_URI"];
}
private function isHttps(): bool
{
return (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");
}
public function getSitemap()
{
$sitemapPath = $this->getSitemapPath();
if (file_exists($sitemapPath)) {
header('Content-Type: text/xml; charset=utf-8');
$content = file_get_contents($sitemapPath);
$content = str_ireplace($this->sitemapDir, '/', $content);
if ($this->curDomain != $this->mainDomain) {
$content = str_ireplace($this->mainDomain, $this->curDomain, $content);
$content = preg_replace('/<loc>https?/', '<loc>'.$this->curProtocol, $content);
}
echo $content;
} else {
include $_SERVER['DOCUMENT_ROOT'] . "/404.php";
}
}
}
$originalHost = 'solverweb.ru'; //Заменить на свой
$sitemapDir = '/sm/'; //Заменить на свой
$sitemap = new sitemapRegion;
$sitemap->setMainDomain($originalHost)->setSitemapDir($sitemapDir)->getSitemap(); Если у Вас Apache, вносите в .htaccess после
RewriteEngine Onследующее:
RewriteRule ^sitemap(.*).xml$ /sitemapController.php [L]Если у Вас nginx, вносите в server {} (пожалуйста, убедитесь что у Вас хватает компетенции, если нет, пишите нам, не нужно ломать сервер)
location / {
rewrite ^/sitemap(.*).xml$ /sitemapController.php break;
}На этом все. Если разобраться не получается, не отчаивайтесь, пишите в поддержку, мы поможем.
