【问题标题】:Create a sitemap.xml programmatically for a multi-language / multi-domain site on the fly以编程方式即时为多语言/多域站点创建 sitemap.xml
【发布时间】:2021-04-05 12:06:28
【问题描述】:

注意:这与站点地图的工作原理或站点地图结构的外观无关,也不是与 SEO 相关的问题。

我的域 mysite.commysite.pt 是同一网站的 2 种语言版本(EN、PT)。 内容通过数据库驱动的 CMS 动态添加/删除。

每个菜单/类别更新都会创建其语言特定的路线,例如:mysite.com/beachmysite.pt/praia,两者都创建指向相同的控制器,例如site_manager/page/beaches.

每个语言版本的代码库是相同的,因此所有语言版本只有一个 /application、/assets 和 /system 文件夹。 language specific content 是通过 <?=$this->lang->line('my_token1')?> 加载的

文件系统如下:

/public_html
    /mysite.com/index.php
    /mysite.pt/index.php
    /all_sites/application
    /all_sites/assets
    /all_sites/system

两个站点的路由目录changes system and application folder location中的index.php文件:

$system_path = '/home/my_host/public_html/all_sites/system';
$application_folder = '/home/my_host/public_html/all_sites/application';

此设置运行顺利。 但是 CMS 很旧,并且不会在菜单或内容发生更改时创建更新的站点地图。

所以我想到了另一种方法来提供更新的站点/特定语言sitemap.xml: 当机器人扫描网站时,可以动态创建站点地图,并为机器人提供最新的sitemap.xml

我通过创建一个控制器方法site_manager/sitemap() 解决了这个问题,该方法解析数据库条目并输出带有echo $this->load->view('sitemap',$data,true); 的站点地图

哪个输出,取决于站点:

<!-- created by mysite.pt, 2020-12-22 -->
<url>
  <loc>https:// mysite.pt/</loc>
  <lastmod>2020-12-22T20:53:36+00:00</lastmod>
  <priority>1.00</priority>
</url>
<url>
  <loc>https:// mysite.pt/praias.html</loc>
  <lastmod>2020-12-22T19:51:51+00:00</lastmod>
  <priority>0.80</priority>
</url>

或者

<!-- created by mysite.com, 2020-12-22 -->
<url>
  <loc>https:// mysite.com/</loc>
  <lastmod>2020-12-22T20:53:36+00:00</lastmod>
  <priority>1.00</priority>
</url>
<url>
  <loc>https:// mysite.com/beaches.html</loc>
  <lastmod>2020-12-22T19:51:51+00:00</lastmod>
  <priority>0.80</priority>
</url>

问题: 这个设置的问题是我在根目录中没有任何 sitemap.xml,因为一旦使用了控制器功能,就只有一个回显的输出。机器人会空手而归,因为找不到任何 sitemap.xml,如果您键入 mysite.com/sitemap.xml 也是如此。

如何让机器人访问控制器方法并读取生成的输出?

【问题讨论】:

    标签: php .htaccess codeigniter codeigniter-3 xml-sitemap


    【解决方案1】:

    机器人正在网站根目录中寻找sitemap.xml

    要让机器人“读取”控制器的回显输出,需要将其定向到控制器函数,在我们的例子中是 site_manager/sitemap()

    诀窍是对创建站点地图输出的控制器进行 .htaccess 重定向,注意 site_manager 在 routes.php 中设置为默认控制器:

    将 sitemap.xml 重定向到 sitemap.php

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

    这意味着试图读取“不存在的 sitemap.xml”的机器人被重定向到控制器并通过echo $this-&gt;load-&gt;view('sitemap',$data,true); 馈送 通过动态输出站点地图数据,获取最新的站点地图 xml 数据。

    您可以测试成功的站点地图创建,例如键入https://mysite.pt/sitemap.xml 在您的浏览器中:

    注意:您不会在ftp://mysite.pt 的ftp 目录列表中找到上面创建的sitemap.xml 文件! ,因为该文件从未被写入或上传。

    您还可以通过谷歌、必应等市长目录列表的搜索控制台进行验证,并确认站点地图是否被绕过机器人成功提交

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多