25

我正在尝试创建一个会自动更新的站点地图。我用我的 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 声明。最终代码贴在上面。谢谢你的帮助!

4

4 回答 4

41

如果您查看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.xmlURL 实际上指向sitemap.php文件

有了它,您将拥有一个sitemap.xml很好的 URL (必需?),但由于代码将在 中sitemap.php,它会被解释。

请参阅Apache 的mod_rewrite.

于 2010-04-30T21:33:08.590 回答
10

最简单的解决方案是将以下行添加到您的 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"?>' ?>
于 2017-02-26T23:39:34.187 回答
7

我使用了威廉的代码(谢谢),并进行了一些小的修改,它对我有用。

我认为这条线:

header("Content-type: text/xml");

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

顺便说一下,对于复制它的其他人来说只是一个小点,但在第一行的之前有一个空格字符<?php- 如果你像我一样不小心复制它,你会花一些时间试图找出代码的原因不会为你工作!

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

最后,在输出中,我使用了一个变量 $domain,这样这段代码就可以用作模板而无需考虑它(前提是您每次都使用相同的表名)。变量被添加到 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>
于 2015-12-10T20:48:16.523 回答
1

这是创建和更新sitemap.xml文件的最简单方法。

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

require_once('database.php');

$sitemapText = '<?xml version="1.0" encoding="UTF-8"?>
    <urlset
          xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
                http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <url>
      <loc>http://ajkhub.com/</loc>
      <lastmod>2021-08-18T18:32:09+00:00</lastmod>
      <priority>1.00</priority>
    </url>
    <url>
      <loc>http://ajkhub.com/includes/about.php</loc>
      <lastmod>2021-08-18T18:32:09+00:00</lastmod>
      <priority>0.80</priority>
    </url>
    <url>
      <loc>http://ajkhub.com/includes/privacy-policy.php</loc>
      <lastmod>2021-08-18T18:32:09+00:00</lastmod>
      <priority>0.80</priority>
    </url>
    <url>
      <loc>http://ajkhub.com/includes/termsandcondition.php</loc>
      <lastmod>2021-08-18T18:32:09+00:00</lastmod>
      <priority>0.80</priority>
    </url>';

$sql = "SELECT * FROM page ORDER BY id DESC LIMIT 4";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
   while($row = mysqli_fetch_assoc($result)) {
$sitemapText .= ' <url>
                 <loc>'.$actual_link."/".$row['page'].'</loc>
                 <lastmod>'.date(DATE_ATOM,time()).'</lastmod>
                 <priority>0.80</priority>
               </url>';
   }
}

$sitemapText .= '</urlset>';

$sitemap = fopen("sitemap.xml", "w") or die("Unable to open file!");

fwrite($sitemap, $sitemapText);
fclose($sitemap);
于 2021-08-18T19:23:06.323 回答