【问题标题】:Multiple Domains & one folder - how to manage sitemap.xml?多个域和一个文件夹 - 如何管理 sitemap.xml?
【发布时间】:2019-03-30 21:04:31
【问题描述】:

我有多个域example-A.comexample-B.comexample-C.com,它们都是不同的,但它们都指向我服务器上的同一个文件夹(这三个域连接非常紧密,但仅通过一个 Laravel 应用程序进行管理, 更多请看Multiple websites with one Laravel installation)

现在我需要为每个域创建一个不同的 sitemap.xml 文件。

我在this answer how to execute PHP inside XML files 找到。这样我就可以动态地更改sitemap.xml 相对于url 的内容。如果爬虫和 SE 尝试访问 XML 文件,这对他们有用吗?还是有更推荐的方法?

【问题讨论】:

  • “如果爬虫和 SE 尝试访问 XML 文件,这对他们有用吗?” - 首先,他们不访问 文件,而是一个资源,其次,为什么不呢?您的服务器在内部为提供 any URL 后面的内容所做的工作与外部世界完全无关。
  • @misorude 为什么sitemap.xml 不是文件?是的,这就是我的想法,但我只是不确定。对不起,如果我的问题冒犯了你。
  • 当您通过本地文件系统查看它时,它是一个文件。一旦你开始通过 HTTP(S) 访问它——这是爬虫会做的,因为它们无权访问你服务器的文件系统——它不再是一个文件,因为 HTTP 没有 “文件”的概念。因此,从您的网络服务器中读取什么数据或如何动态创建数据,对于外部的任何人来说都无关紧要。

标签: php laravel-5 php-7


【解决方案1】:

有一个与sitemap.xml 匹配的路由,但会导致一个 PHP 脚本。然后这个脚本提供一个预先生成的站点地图文件,或者甚至可以自己生成它。 我能想象的最简单的方法是:

# .htaccess
RewriteRule ^/sitemap.xml$ sitemap.php [L]

// sitemap.php
switch ($_SERVER['HTTP_HOST']) {
    case 'example-A.com':
        echo file_get_contents(__DIR__ . '/sitemap-A.xml');
        break;
    case 'example-B.com':
        echo file_get_contents(__DIR__ . '/sitemap-B.xml');
        break;
    // etc.
}

我不知道 Laravel,但我确信有一种方法可以创建与 /sitemap.xml 匹配并由某个控制器提供服务的路由。

【讨论】:

  • 感谢这个想法!也许最好使用基于{HTTP_HOST} 的RewriteRule,然后链接到sitemap-A.xmlsitemap-B.xml。然后不需要sitemap.php 和切换规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2016-02-16
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
相关资源
最近更新 更多