PHP站点地图索引

时间:2010-08-29 16:54:20

标签: php sitemap

我的站点地图非常庞大,我必须将其分解为我已经完成的站点地图索引,并且列出的站点地图是sitmap-1.xml sitemap-2.xml等。

我想要一个基于所选站点地图编号的站点地图文件,即。 sitemap-1.xml将转到站点地图文件并列出1 - 30,000个链接,如果选择sitemap-2将显示30,000 - 60,000等...

如何查看选择了哪个站点地图编号,并命名该文件?

2 个答案:

答案 0 :(得分:2)

为什么不像“sitemap-1”和“sitemap-2”那样命名它们,并且在sitemap.php文件中执行类似的操作:

$number = $_GET['number'];
$entries_per_page = 30000;
for($i = ($number - 1) * $entries_per_page; $i < $number * $entries_per_page; $i++){
  // print out the values
}

除此之外,在你的.htaccess中添加一个条目:

RewriteRule sitemap-([0-9]+).xml$ sitemap.php?number=$1

您还可以使用bounries进行SQL查询:

$query = "SELECT * FROM table LIMIT ".(($number - 1) * $entries_per_page).", ".$entries_per_page;

我使用类似的东西,除了一个sitemap_index.php文件,如下所示:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<? for($i = 1; $i <= 6; $i++) : ?>
 <sitemap>
  <loc><?php echo ROOT_PATH?>sitemap_<?= $i ?>.xml</loc>
  <lastmod><?php echo date('Y-m-d')?></lastmod>
 </sitemap>
<? endfor ?>
</sitemapindex>

由于大多数搜索引擎都喜欢最多包含1000个条目的站点地图,因此您可以将站点地图拆分为更小的部分。只需使用ceil($ total_entries / $ entries_per_page)作为for循环(替换“6”)。

答案 1 :(得分:0)

听起来你需要一个原始的链接索引文档?像这样:

<site-idx>
  <sub href="sitemap-1.xml"/>
  <sub href="sitemap-2.xml"/>
  <sub href="sitemap-3.xml"/>
</site-idx>

然后你可以编写一个以数字作为输入的程序,假设每个文件有多少条目,然后加载正确的索引?或者您可以在索引文件中指定每个子文件中的条目数:

<site-idx>
  <sub href="sitemap-1.xml" num="1000"/>
  <sub href="sitemap-2.xml" num="1010"/>
  <sub href="sitemap-3.xml" num="1101"/>
</site-idx>

您可以利用XInclude加载子文档,对于我建议在PHP中使用XMLReader的大型XML文件,它会消耗更少的内存。