通过.htaccess重定向,文件robots.txt和sitemap.xml可以动态吗?


13

我有一个多语言和多域站点。它通过唯一的CMS安装(Drupal)运行,因此我只有一个根目录。因此,据我所知,如果我有一个静态robots.txt,我只能在其中显示单个域的文件。

我可以在.htaccess中加入一行吗

Redirect 301 /robots.txt /robots.php

(或同等说明,请指出,如果允许的话)

所以它重定向到一个动态的PHP文件,在那里我可以用来根据不同的含有$_SERVER['HTTP_HOST']

以及对sitemap.xml的相同问题,因此我可以提供一个动态的sitemap.php,它指示每个不同域的不同链接。

如上所述,不使用.txt和.xml的问题是所有域在服务器计算机中共享一个物理目录。


Answers:


12

您可以使任何文件动态化。最好的方法不是通过重定向,而是通过重写规则。

RewriteRule ^robots\.txt$  /robots.php [L]

这样,您便可以使用动态脚本为其提供动力,但URL不会改变。大多数抓取工具(包括Googlebot)都将遵循robots.txt的重定向,但是如果您引入重定向,则某些抓取工具会感到困惑。

请注意,即使你用PHP供电它,您的robots.txt应该出现是静态的每个履带的各个领域。可以为不同的域甚至不同的用户代理提供不同的内容。但是,随机地或基于一天中的时间提供不同的内容会真正使搜索引擎爬虫感到困惑,并弄乱您的SEO。


站点地图可以随意命名。您可以重定向它们,或使用重写规则在同一URL上动态为其供电。您也可以像这样命名

  • site-a-sitemap.xml
  • site-b-sitemap.xml
  • site-c-sitemap.xml

然后在robots.txt中引用它们:

Sitemap: http://www.example.com/example-sitemap.xml

或通过其网站站长工具或搜索控制台将其手动提交给搜索引擎。


感谢您的回复。请更正可能是错字的地方,它是有效的w3d指令,因此代码应RewriteRule ^robots\.txt$ robots.php [L]不含\符号。
塞萨尔

是的,带斜杠的版本适用于您的apache.conf文件。对于.htaccess,您需要将其保留。我已经编辑了答案,以包括适用于.htaccess的版本。
斯蒂芬·奥斯特米勒

@Cesar 如果此指令位于服务器配置中,则模式(即^/robots\.txt$)上的斜杠前缀将是必需的,但是,是的,在每个目录的.htaccess文件中它将不匹配。在这种情况下,替换(例如/robots.php)上的斜杠前缀是可选的。
MrWhite 2015年

5

是的,以同样的方式,任何请求都可以是“动态的”。

但是,您不会重定向(如示例代码中一样),应该使用mod_rewrite在内部进行重写。(与Drupal可能已经在做的相同。)

例如,在您的根.htaccess文件中:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine 应该只出现一次(尽管多次出现并不重要)。

您只需要确保它与.htaccess文件中的任何其他指令都没有冲突即可。因此,这可能应该在文件开头附近,当然应该在前端控制器之前。


4

使站点地图文件动态化是一种很好的方法-这是自动更新站点地图的好方法。

使robots.txt文件动态化(对于同一主机!对于单独的主机执行此操作实际上只是针对每个主机的普通robots.txt文件。)可能会导致问题:每次从网站抓取URL时都不会抓取,因此可能会缓存“错误”版本。例如,如果您在工作时间内对robots.txt文件块进行爬网,则可能会对其进行缓存,然后再进行一天的缓存-这意味着不会对任何内容进行爬网(或者,允许爬网时也不会对其进行缓存)。例如,对于大多数网站,Google大约每天一次抓取robots.txt文件。


我认为静态或动态之间没有区别。我还将使用动态部分根据不同的主机提供不同的版本,但是由于主机都共享计算机服务器中的同一物理目录,因此可以使用robots1.txt,robots2.txt,robots3.txt(数字表示我们在哪个域中)。
Cesar 2015年

我认为动态性并不意味着他们每次都希望提供不同的内容。他们只是想通过PHP为其提供动力,因此他们可以根据PHP代码中的主机名做出决定。我经常使robots.txt动态化,以便为不同的用户代理提供不同的规则。
斯蒂芬·奥斯特米勒

2
是的,正如我提到的,对多个主机执行此操作本质上就像每个主机具有单独的robots.txt文件,这很好。但是,有时我们会看到网站尝试使用动态robots.txt文件按一天的时间来控制抓取,这会引起很多问题。
约翰·穆勒

好点子。我已经编辑了接受的答案,并给出了警告,以免robots.txt变得非常动态。
斯蒂芬·奥斯特米勒

0

无需创建sitemap.php,因为:1.对于每种语言,您可以运行一个单独的sitemap.xml文件并在搜索引擎控制台中指定每种语言。2.标准的站点地图文件可以定期重写以包括最新内容,并且可以动态方式进行编辑-不需要.php。由内部更新机制和cron来重新创建具有标准扩展名.xml的相同文件

Sitemap.xml文件是静态的,只有更新才能使它们动态化-它们不能实时更新。可能会导致它们每分钟重写一次,但是没有必要这样做,因为:1.自上次提交以来,Google不会在不到1小时内对其进行检查。2.当站点地图文件很大时,请对其进行重写通常会使服务器性能提高。

如果数据量很大,并且站点地图文件大于50mb,则需要具有多个站点地图的系统。这意味着sitemap2,3 .... xml将添加到主文件列表中,但是在重新创建这些文件之前,这些文件中的内容也将保持固定(例如,通过cron)。

另外要提到的是,一旦搜索引擎访问了文件,它就不会很快返回到该文件(除非它是手动完成的)。它确认了在任何情况下都无需创建sitemap.php的实时更新,因为普通的sitemap.xml本身可以是动态的,可以在一整天或一周内使用新内容进行更新。

我想不出使用sitemap.php的任何专业人士。这样做没有好处,因为还有其他更好/适当的方式来使用这些文件。


首选动态的一些原因:Sitemap占用大量磁盘空间,而动态生成则不占用磁盘空间。站点地图需要保持最新,动态站点地图可能是一种简便的方法。
斯蒂芬Ostermiller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.