当前位置

动态生成robots.txt的PHP程序

James Qi 在 2013年8月30日 - 15:32 提交
内容摘要:以前尝试过《Drupal系列网站用robotstxt模块生成独立robots.txt》,可以实现多站点的每个站点都有不同的robots.txt,但缺点是需要逐个编辑,当子站数量多、修改次数多的时候,依......

  以前尝试过《Drupal系列网站用robotstxt模块生成独立robots.txt》,可以实现多站点的每个站点都有不同的robots.txt,但缺点是需要逐个编辑,当子站数量多、修改次数多的时候,依然显得麻烦。

  后来也尝试过程序动态生成robots.txt,但一直没有成功,昨天还尝试了在自定义module中编写,但显示的内容包含在html.tpl.php, page.tpl.php等模板之中,也不行。

  再多查了一些网上的资料并反复测试,终于是可以实现了,步骤如下:

  1. 删除原来的robots.txt;
  2. 编写一个robots.php,用PHP程序来动态输出内容;
  3. 修改.htaccess,让用户访问robots.txt的时候重定向到robots.php的输出内容。

  一个robots.php的例子:

<?php
header("Content-Type: text/plain");

$server_name=$_SERVER['SERVER_NAME'];
$output="
# jamesqi 2013-8-29 16:27
# Add Start #

Sitemap: http://$server_name/sitemap.xml
Sitemap: http://$server_name/rss.xml

User-agent:Mediapartners-Google
Disallow:

User-agent: *

Allow: /sites/default/files/

Disallow: /boost_stats.php

# Add End #

Crawl-delay: 10
# Directories
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /INSTALL.sqlite.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /filter/tips/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
Disallow: /user/logout/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=filter/tips/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/
Disallow: /?q=user/logout/
";
print $output;
?>

  在.htaccess中定义的ReWrite规则:

RewriteCond     %{REQUEST_URI}          ^\/robots\.txt$
RewriteRule     ^(.*)$                  /robots.php [L]

  先在我的博客中测试成功,电脑版、手机版分别是不同的robots.txt内容:

  其中的Sitemap提交给搜索引擎的是各自的sitemap地址。

  以后可以把这个办法实现到各个系列的网站中去。

 

自由标签: