我的站点地图非常庞大,我必须将其分解为我已经完成的站点地图索引,并且列出的站点地图是sitmap-1.xml sitemap-2.xml等。
我想要一个基于所选站点地图编号的站点地图文件,即。 sitemap-1.xml将转到站点地图文件并列出1 - 30,000个链接,如果选择sitemap-2将显示30,000 - 60,000等...
如何查看选择了哪个站点地图编号,并命名该文件?
答案 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文件,它会消耗更少的内存。