以前嘗試過《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地址。
以後可以把這個辦法實現到各個系列的網站中去。
自由标簽
评论