使用 PHP 创建 XML 站点地图

2022-08-30 16:58:08

我正在尝试创建一个会自动更新的站点地图。我对我的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>

问题在于动态网址(例如从数据库中提取的网址)没有生成,站点地图也不会进行验证。谢谢!

编辑:现在,我只是想让代码本身工作。我将其设置为本地测试服务器上的PHP文件。正在使用上面的代码。目前,屏幕或源中没有任何内容显示任何内容。我以为我犯了语法错误,但我找不到任何东西。任何和所有的帮助都是值得赞赏的!

编辑2:好吧,我把它整理好了。显然,我必须用PHP回显xml声明。最终代码发布在上面。感谢您的帮助!


答案 1

如果您查看生成的(例如,在浏览器中使用视图源),您将看到以下内容: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


这可能是因为您的Web服务器无法将.xml识别为应包含PHP代码的文件的扩展名

至少两种可能的解决方案:

  • 重新配置你的服务器,所以XML文件通过PHP解释器(可能不是一个好主意:这可能会导致现有文件出现问题!
  • 例如,将站点地图的扩展名更改为,以便您的服务器对其进行解释。sitemap.php


我会添加另一个解决方案:

  • 具有包含代码的文件sitemap.php
  • 并使用重写规则,以便URL实际指向文件sitemap.xmlsitemap.php

这样,您将拥有URL,这很好(必需?)),但是由于代码将在其中,它将被解释。sitemap.xmlsitemap.php

请参阅 Apache 的mod_rewrite


答案 2

最简单的解决方案是在apache文件中添加以下行.htaccessRewriteEngine On

RewriteRule ^sitemap\.xml$ sitemap.php [L]

然后只需在根文件夹中放置一个文件,该文件通常可以通过 访问,这是所有搜索引擎将首先搜索的默认URL。sitemap.phphttp://yoursite.com/sitemap.xml

该文件应以sitemap.php

<?php header('Content-type: application/xml; charset=utf-8') ?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>

推荐