使用PHP创建XML站点地图

wil*_*amg 16 php xml sitemap

我正在尝试创建一个会自动更新的站点地图.我做了类似于我的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>
Run Code Online (Sandbox Code Playgroud)

问题是动态URL(例如从数据库中提取的URL)没有生成,站点地图也不会验证.谢谢!

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

编辑2:好的,我把它整理好了.显然,我不得不用PHP回应xml声明.最终代码发布在上面.谢谢你的帮助!

Pas*_*TIN 31

如果您查看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:/
...
Run Code Online (Sandbox Code Playgroud)

<?php,存在于该输出,显示,PHP代码不被解释.


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

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

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


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

  • 有一个sitemap.php包含代码的文件
  • 使用RewriteRule,以便sitemap.xmlURL实际指向该sitemap.php文件

有了它,你将拥有一个sitemap.xml很好的URL (必需?),但是随着代码的进入sitemap.php,它将得到解释.

Apache的mod_rewrite.

  • 不确定这可以在`.htaccess`文件中完成*(取决于服务器的配置,可能需要直接在服务器的配置中执行)*;; 但你可以尝试,也许它会工作:-) (2认同)

Joã*_*ira 9

最简单的解决方案是将以.htaccess下行添加到您的 apache文件中RewriteEngine On

RewriteRule ^sitemap\.xml$ sitemap.php [L]
Run Code Online (Sandbox Code Playgroud)

然后只需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"?>' ?>
Run Code Online (Sandbox Code Playgroud)


Chr*_*is9 5

我使用过威廉的代码(谢谢),经过一些小修改,它对我有用.

我认为这句话:

header("Content-type: text/xml");
Run Code Online (Sandbox Code Playgroud)

应该是顶部之后的第二行 <?php

顺便说一句,对于复制它的其他任何人来说只是一个小点,但<?php在第一行之前有一个空格字符- 如果你像我一样无意中复制它,你会花一点时间试图弄清楚为什么代码不适合你!

我不得不稍微调整一下MySql select语句.

最后,在输出中,我使用了一个变量$ domain,这样这段代码就可以用作模板,而不需要考虑它(前提是你每次都使用相同的表名).变量被添加到connectdb.php文件中,该文件包含在连接数据库中.

这是William的代码的工作版本:

<?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>
Run Code Online (Sandbox Code Playgroud)