За последние 24 часа нас посетили 21939 программистов и 987 роботов. Сейчас ищут 654 программиста ...

PHP генерация Sitemap.xml

Тема в разделе "PHP для новичков", создана пользователем Виктор К., 1 сен 2016.

Метки:
  1. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    Здраствуйте. Написал sitemap.xml:

    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    3.    <url>
    4.       <loc>http://www.site.com</loc>
    5.    </url>
    6.  
    7.  
    8. <?php
    9. $Param1 = 'SELECT `id`, `name`, `thumbnail` FROM `posts` WHERE `active` = 1 ORDER BY `id` DESC';
    10. $Query = mysqli_query($CONNECT, $Param1);
    11. while ($Row1 = mysqli_fetch_assoc($Query)){
    12.     $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'));
    13. echo '<url>
    14.       <loc>http://www.site.com/materials/'.$Tag_post['alias'].'/id/'.$Row1['id'].'</loc>
    15.    </url>';
    16. }
    17.  
    18. while ($Row1 = mysqli_fetch_assoc($Query)){
    19. echo '<url>
    20.       <loc>http://www.site.com/materials/'.$Row1['thumbnail'].'</loc>
    21.    </url>';
    22. }
    23. ?>
    24.  
    25. </urlset>
    Проблема в том, что Sitemap должен быть с расширением .xml, но в таком случае скрипт не выполнится.

    Буду рад услышать варианты решения проблемы.
     
    #1 Виктор К., 1 сен 2016
    Последнее редактирование: 1 сен 2016
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    1. Генерировать sitemap по крону, вместо того что бы дергать базу и пых при каждом обращении к нему.
    2. Настроить сервер так, что бы обращение к sitemap переадресовывалось на пых. (rewrite)
     
  3. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    Спасибо, более склонен к второму варианту. Если вам не сложно, не могли бы написать тут пример кода (как я понимаю, для htaccess).
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    По-хорошему это все через фронт (единую точку входа) делается – там пофиг, какие буковки в адресе.
    Вот: Как сделать единую точку входа с ЧПУ? – на входе можете просто сравнить $_SERVER['REQUEST_URI'] с /sitemap.xml – но а если все же надо исключительно для карты, измените в примере маску на ^sitemap\.xml$ и «рерайтите» на ваш php-файл.

    Если боты будут доставать или карта со временем станет многотонной, то лучше первый вариант.
     
  5. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    То есть, как я понял, главное, чтобы по адресу www.site.com/sitemap.xml выводилась карта? А сам файл может быть PHP скриптом?

    P.S.На сайте реализована единая точка входа.
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    P.S. С базой нужно работать до начала вывода.
    --- Добавлено ---
    И в чем тогда проблема? Можете все что хотите поставить в соответствие адресу карты.
    --- Добавлено ---
    Естественно.
     
    Виктор К. нравится это.
  7. Виктор К.

    Виктор К. Новичок

    С нами с:
    1 апр 2016
    Сообщения:
    139
    Симпатии:
    6
    Адрес:
    Украина
    Спасибо.
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Если хотите добиться большей аутентичности, можете контент-тайп соответствующий выдавать, хотя и так должно работать.
     
    Виктор К. нравится это.