我正在尝试创建一个会自动更新的站点地图。我对我的 RSS 提要做了一些类似的事情,但是这个站点地图无法工作。您可以在 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("Y-m-d", strtotime($row['timestamp']));
echo "
<url>
<loc>http://designdeluge.com/".$title."</loc>
<lastmod>".$date."</lastmod>
<changefreq>never</changefreq>
<priority>0.8</priority>
</url>";
} ?>
</urlset>
问题在于未生成动态 URL(例如,从数据库中提取的 URL)并且站点地图无法验证。谢谢!
编辑:现在,我只是想让代码本身正常工作。我在本地测试服务器上将其设置为 PHP 文件。正在使用上面的代码。现在,屏幕上或源代码中什么都不显示。我在想我犯了一个语法错误,但我找不到任何东西。感谢您提供任何帮助!
编辑 2: 好吧,伙计们,我把它整理好了。显然,我不得不用 PHP 回应 xml 声明。最终代码贴在上面。感谢您的帮助!
最佳答案
如果你看一下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 代码的文件的扩展。
至少有两种可能的解决方案:
- 重新配置您的服务器,使 XML 文件通过 PHP 解释器(这可能不是一个好主意:这可能会导致现有文件出现问题!)
- 将站点地图的扩展名更改为
sitemap.php
例如,它由您的服务器解释。
我会添加另一个解决方案:
- 有一个
sitemap.php
包含代码的文件 - 并且使用RewriteRule 所以
sitemap.xml
URL 实际上指向sitemap.php
文件
这样,您将拥有 sitemap.xml
URL,很好(必需?),但代码将在 sitemap.php
中, 它会被解释。
参见 Apache's mod_rewrite
.
关于php - 使用 PHP 创建 XML 站点地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747801/