Здраствуйте. Написал sitemap.xml: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://www.site.com</loc> </url> <?php $Param1 = 'SELECT `id`, `name`, `thumbnail` FROM `posts` WHERE `active` = 1 ORDER BY `id` DESC'; $Query = mysqli_query($CONNECT, $Param1); while ($Row1 = mysqli_fetch_assoc($Query)){ $Tag_post = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT `alias` FROM `tags` WHERE `tagid` IN (SELECT `taid` FROM `posts_tags` WHERE `postid` = '.$Row1['id'].') ORDER BY `tagid` LIMIT 0, 1')); echo '<url> <loc>http://www.site.com/materials/'.$Tag_post['alias'].'/id/'.$Row1['id'].'</loc> </url>'; } while ($Row1 = mysqli_fetch_assoc($Query)){ echo '<url> <loc>http://www.site.com/materials/'.$Row1['thumbnail'].'</loc> </url>'; } ?> </urlset> Проблема в том, что Sitemap должен быть с расширением .xml, но в таком случае скрипт не выполнится. Буду рад услышать варианты решения проблемы.
1. Генерировать sitemap по крону, вместо того что бы дергать базу и пых при каждом обращении к нему. 2. Настроить сервер так, что бы обращение к sitemap переадресовывалось на пых. (rewrite)
Спасибо, более склонен к второму варианту. Если вам не сложно, не могли бы написать тут пример кода (как я понимаю, для htaccess).
По-хорошему это все через фронт (единую точку входа) делается – там пофиг, какие буковки в адресе. Вот: Как сделать единую точку входа с ЧПУ? – на входе можете просто сравнить $_SERVER['REQUEST_URI'] с /sitemap.xml – но а если все же надо исключительно для карты, измените в примере маску на ^sitemap\.xml$ и «рерайтите» на ваш php-файл. Если боты будут доставать или карта со временем станет многотонной, то лучше первый вариант.
То есть, как я понял, главное, чтобы по адресу www.site.com/sitemap.xml выводилась карта? А сам файл может быть PHP скриптом? P.S.На сайте реализована единая точка входа.
P.S. С базой нужно работать до начала вывода. --- Добавлено --- И в чем тогда проблема? Можете все что хотите поставить в соответствие адресу карты. --- Добавлено --- Естественно.
Если хотите добиться большей аутентичности, можете контент-тайп соответствующий выдавать, хотя и так должно работать.