Мы рекомендуем настраивать генерацию карты сайта на крон, так как с агентами могут возникать проблемы. На кроне карта будет генерироваться стабильнее, но данное действие требует определенных знаний. По-этому, если карта будет настроена на агента, ничего страшного.
Для тех, кто все же имеет эти знания, поехали...
Создайте файл sitemapGen.php в папке /local/php_interface/ (если такой папки нет, ее нужно создать).
<?php
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
$pass = "СЮДА ВБИТЬ ПАРОЛЬ";
if($pass == "СЮДА ВБИТЬ ПАРОЛЬ" && !is_cli()) die('Защита от дурака, переменная $pass не установлена.');
$access = false;
function is_cli()
{
if( defined('STDIN'))return true;
if( empty($_SERVER['REMOTE_ADDR']) and !isset($_SERVER['HTTP_USER_AGENT']) and count($_SERVER['argv']) > 0) return true;
return false;
}
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
include_once($_SERVER["DOCUMENT_ROOT"]. "/bitrix/modules/main/include/prolog_before.php");
set_time_limit(0);
if(is_cli() || $_GET["PWD"] == $pass)
$access = true;
CModule::IncludeModule("solverweb.sitemap");
if($access)
if(SWSitemapGenerate::Generate() == NULL) echo "OK";
else
include $_SERVER["DOCUMENT_ROOT"]."/404.php";
?>
Дальше есть 2 варианта запуска, это через интерпретатор или через wget (на самом деле вариантов больше, но придумать в каких вариантах они могут пригодиться, мы не смогли).
Запускаем через интерпретатор в режиме PHP CLI
Это более сложный способ, но более правильный.
Заходим в SSH.
Пишем "whereis php", выбираем из вариантов тот, который используется на сайте и прописываем в CRON команду:
Прописываем в Cron строку вида:
/opt/php74/bin/php /var/www/domain/data/www/domain/local/php_interface/sitemapGen.php
Периодичность выбирайте сами, исходя из ваших потребностей.
Запускаем через wget
Это более простой способ, но менее правильный. Просто запускаем в крон команду.
wget -O /dev/null -q https://domain/local/php_interface/sitemapGen.php?PWD=<Пароль>
У такой реализации есть свои плюсы, например, если на сервере нет крона вообще, можно поставить с другой машины (да-да, в 2020 году не у всех хостингов есть CRON) или слова SSH, интерпретатор вызывают беличий транс. Но есть и свои минусы, которые не очень имеет смысл расписывать.
Для этого способа обязательно нужно установить пароль в переменной $pass файла sitemapGen.php, иначе он работать не будет! После чего зайдите по ссылке
https://domain/local/php_interface/sitemapGen.php?PWD=<Пароль> и убедитесь, что все работает. Если вы все сделали верно, вы получите в ответ ОК.