Я пытаюсь создать файл Sitemap, который будет автоматически обновляться. Я сделал что-то похожее на мой RSS-канал, но этот файл Sitemap отказывается работать. Вы можете просмотреть его в прямом эфире по адресу http://designdeluge.com/sitemap.xml. Я думаю, что основная проблема заключается в том, что он не распознает PHP-код. Вот полный источник:
<?php include 'includes/connection.php'; header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> <url> <loc>http://designdeluge.com/</loc> <lastmod>2010-04-20</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url> <url> <loc>http://designdeluge.com/about.php</loc> <lastmod>2010-04-20</lastmod> <changefreq>never</changefreq> <priority>0.5</priority> </url> <?php $entries = mysql_query("SELECT * FROM Entries"); while($row = mysql_fetch_assoc($entries)) { $title = stripslashes($row['title']); $date = date("Ymd", strtotime($row['timestamp'])); echo " <url> <loc>http://designdeluge.com/".$title."</loc> <lastmod>".$date."</lastmod> <changefreq>never</changefreq> <priority>0.8</priority> </url>"; } ?> </urlset>
Проблема заключается в том, что динамические URL-адреса (например, те, что вытащили из БД) не генерируются, и карта сайта не будет проверяться. Благодаря!
EDIT: Прямо сейчас, я просто пытаюсь заставить сам код работать. Я настроил его как файл PHP на моем локальном сервере тестирования. Используется код выше. Сейчас ничего не отображается ни на экране, ни в источнике. Я думаю, что я сделал синтаксическую ошибку, но ничего не могу найти. Любая помощь приветствуется!
РЕДАКТИРОВАТЬ 2: Хорошо, я выяснил, что это ребята. По-видимому, мне пришлось отменить XML-объявление с помощью PHP. Окончательный код размещен выше. Спасибо за вашу помощь!
Если вы посмотрите на sitemap.xml
который сгенерирован (например, с использованием источника просмотра в вашем браузере) , вы увидите следующее:
<?php header('Content-type: text/xml'); ?> <?xml version="1.0" encoding="UTF-8" ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http:/ ...
<?php
, присутствующий в этом выпуске, показывает, что PHP-код не интерпретируется .
Вероятно, это связано с тем, что ваш веб-сервер не распознает .xml
как расширение файлов, содержащих PHP-код .
По крайней мере, два возможных решения:
sitemap.php
, поэтому оно интерпретируется вашим сервером. Я бы добавил еще одно решение:
sitemap.php
, содержащий код sitemap.xml
фактически sitemap.php
файл sitemap.php
При этом у вас будет URL sitemap.xml
, который хорош (обязательно?) , Но поскольку код будет в sitemap.php
, он будет интерпретироваться.
См. Mod_rewrite от mod_rewrite
.
Я использовал код Уильяма (спасибо) и несколько небольших модификаций, которые он работал для меня.
Я думаю, что линия:
header("Content-type: text/xml");
должна быть вторая строка после верхнего <?php
Кстати, это всего лишь небольшая точка для всех, кто ее копирует, но перед первым символом <?php
в первой строке есть один пробел – если вы невольно копируете его, как я, вы потратите немного времени, пытаясь выяснить почему код не будет работать для вас!
Мне тоже пришлось немного подбирать заявление о выборе MySql.
Наконец, на выходе я использовал переменную $ domain, чтобы этот фрагмент кода можно было использовать в качестве шаблона без необходимости думать об этом (при условии, что вы используете одно и то же имя таблицы каждый раз). Variabe добавляется в файл connectdb.php, который включен для подключения к базе данных.
Вот моя рабочая версия кода Уильяма:
<?php header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8" ?>'; include 'includes/connectdb.php'; ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> <url> <loc>http://www.DOMAIN.co.uk/</loc> <priority>1.00</priority> </url> <?php $sql = "SELECT * FROM pages WHERE onshow = 1 ORDER BY id ASC"; $result = mysql_query($sql,$conn); while($row = mysql_fetch_array($result)) { $filename = stripslashes($row['filename']); ?> <url> <loc>http://www.<?php echo "$domain"; ?>/<?php echo "$filename" ?></loc> <changefreq>monthly</changefreq> <priority>0.5</priority> </url> <?php } ?> </urlset>
Лучшее решение – добавить в файл apache .htaccess
следующую строку после RewriteEngine On
RewriteRule ^sitemap\.xml$ sitemap.php [L]
а затем просто имея файл sitemap.php
в корневой папке, который обычно доступен через http://yoursite.com/sitemap.xml
, URL-адрес по умолчанию, в который будут сначала искать все поисковые системы.
Файл sitemap.php
должен начинаться с
<?php header('Content-type: application/xml; charset=utf-8') ?> <?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>
оно работает 🙂