В прошлом посте, который был посвящён организации мультиязычности сайта на Instant 1* посредством поддоменов смотрящих в один и тот же каталог на хостинге, я упоминал о том, что одна из проблем при таком подходе — как отдать разное содержимое sitemaps.xml в зависимости от того, через какой поддомен его читает робот.
Проблема не то что бы экстра сложная, скорее мне она казалась интересной (её решение).
Можно было бы конечно тупо назначить для каждого поддомена разный файл с картой сайта и в панели вебмастера указать это. Для ru.mysite.com — sitemap_ru.xml для en.mysite.com — sitemap_en.xml.
Но мне хотелось именно сохранить стандартный адрес сайтмапа sitemap.xml, при этом что бы его содержимое менялось в зависимости от хоста.
Для основного домена — sitemap_main_domain.xml, для ru.mysite.con — sitemap_ru.xml, для en.mysite.com — sitemap_en.xml.
Положил их в корень сайта.
Туда же положил файл sitemaps.php с таким содержимым
В зависимости от того с какого хоста запрашивается sitemaps.php он берёт содержимое одного из xml файлов и вываливает его.
Теперь открываю файл url_rewrite.php и вижу там в комментариях инструкции
Создаю файл custom_rewrite.php с таким содержимым
и кладу его в корень сайта.
Теперь при запросе файла sitemap.xml выводится содержимое sitemaps.php внутри которого содержимое одного из трех .xml (в зависимости от того с какого хоста спрашивают).
В валидаторе Яндекс проверял всё нормально — ошибок нет.
По поводу генератора sitemaps — в этот раз использовал вот этот набор github.com/pawelantczak/php-sitemap-generator — простой удобный скрипт, только пока не смог прикрутить туда добавление альтернативных lang вариантов для каждой ссылки, там вопрос немного другого харакетара — как нибудь с следующий раз). Просто указал альтернативные ссылки на языковые версии страниц через метатег добавленный в template.php
Что бы приспособить этот генератор к инстанту в начало файла SitemapGenerator.php добавил
в simple-example.php где нибудь после
вставляем запрос данных из таблицы и генерацию ссылок из полученных данных, например объявления
mysite.com/ — меняем на свой хост
блок можно скопировать и повторить для следующей таблицы.
оба файла в корень сайта и открыть в браузере simple-example.php после чего можно проверить наличие в корне файла sitemap.xml и если иметь ввиду то, что в начале поста, переименовать его в sitemap_ru.xml и сгенерировать новый файл для другого хоста.
P.S. — А и да, в прошлом посте я ради красивого слога в завершении написал "продолжение следует", особо не планируя. Но Олег Васильевич ткзть поймал на слове и вот… В этот раз просто — до свидания))
Проблема не то что бы экстра сложная, скорее мне она казалась интересной (её решение).
Можно было бы конечно тупо назначить для каждого поддомена разный файл с картой сайта и в панели вебмастера указать это. Для ru.mysite.com — sitemap_ru.xml для en.mysite.com — sitemap_en.xml.
Но мне хотелось именно сохранить стандартный адрес сайтмапа sitemap.xml, при этом что бы его содержимое менялось в зависимости от хоста.
Итак, я сгенерировал три файла карты сайта.
Для основного домена — sitemap_main_domain.xml, для ru.mysite.con — sitemap_ru.xml, для en.mysite.com — sitemap_en.xml.
Положил их в корень сайта.
Туда же положил файл sitemaps.php с таким содержимым
<?php $c_domain = $_SERVER['HTTP_HOST']; switch ($c_domain) { case 'mysite.com': $sm_file = 'sitemap_main_domain.xml'; break; case 'en.mysite.com'': $sm_file = 'sitemap_en.xml'; break; case 'ru.mysite.com'': $sm_file = 'sitemap_ru.xml'; break; } ?>
Теперь открываю файл url_rewrite.php и вижу там в комментариях инструкции
// Если вы хотите добавить собственное правило, то создайте // файл custom_rewrite.php и объявите в нем функцию // custom_rewrite_rules() по аналогии с текущим файлом!
<?php function custom_rewrite_rules(){ 'source' => '/^sitemap.xml$/ui', 'target' => 'sitemaps.php', 'action' => 'alias' ); return $rules; } ?>
Теперь при запросе файла sitemap.xml выводится содержимое sitemaps.php внутри которого содержимое одного из трех .xml (в зависимости от того с какого хоста спрашивают).
В валидаторе Яндекс проверял всё нормально — ошибок нет.
По поводу генератора sitemaps — в этот раз использовал вот этот набор github.com/pawelantczak/php-sitemap-generator — простой удобный скрипт, только пока не смог прикрутить туда добавление альтернативных lang вариантов для каждой ссылки, там вопрос немного другого харакетара — как нибудь с следующий раз). Просто указал альтернативные ссылки на языковые версии страниц через метатег добавленный в template.php
Что бы приспособить этот генератор к инстанту в начало файла SitemapGenerator.php добавил
include(PATH.'/core/cms.php'); cmsCore::getInstance(); $inDB = cmsDatabase::getInstance();
в simple-example.php где нибудь после
$sitemap = new SitemapGenerator("http://mysite.com/");
$inDB = cmsDatabase::getInstance(); $sql = "SELECT * FROM cms_board_items WHERE published = 1 ORDER BY id ASC"; $result = $inDB->query($sql); while ($item = $inDB->fetch_assoc($result)){ //для каждого найденного опубликованного объявления в карту сайта будет добавлена ссылка. $sitemap->addUrl("https://mysite.com/board/read".$item['cityid']."html", date('c'), 'daily', '0.5'); }
блок можно скопировать и повторить для следующей таблицы.
оба файла в корень сайта и открыть в браузере simple-example.php после чего можно проверить наличие в корне файла sitemap.xml и если иметь ввиду то, что в начале поста, переименовать его в sitemap_ru.xml и сгенерировать новый файл для другого хоста.
P.S. — А и да, в прошлом посте я ради красивого слога в завершении написал "продолжение следует", особо не планируя. Но Олег Васильевич ткзть поймал на слове и вот… В этот раз просто — до свидания))
Реклама #
Олег Васильевич я 4 года назад #
noszone 4 года назад #