以前嘗試過《Drupal系列網站用robotstxt模塊生成獨立robots.txt》,可以實現多站點的每個站點都有不同的robots.txt,但缺點是需要逐個編輯,當子站數量多、修改次數多的時候,依然顯得麻煩。
後來也嘗試過程序動态生成robots.txt,但一直沒有成功,昨天還嘗試了在自定義module中編寫,但顯示的内容包含在html.tpl.php, page.tpl.php等模闆之中,也不行。
再多查了一些網上的資料并反複測試,終于是可以實現了,步驟如下:
- 删除原來的robots.txt;
- 編寫一個robots.php,用PHP程序來動态輸出内容;
- 修改.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地址。
以後可以把這個辦法實現到各個系列的網站中去。
自由标簽
评论