ruby-on-rails – 用于rails中子域的多个robots.txt

我有一个包含多个子域的站点,我希望命名的子域robots.txt与www一个不同.

我尝试使用.htaccess,但FastCGI不看它.

所以,我试图设置路由,但似乎你不能直接重写,因为每个路由都需要一个控制器:

map.connect '/robots.txt',:controller => ?,:path => '/robots.www.txt',:conditions => { :subdomain => 'www' }
map.connect '/robots.txt',:path => '/robots.club.txt'

解决这个问题的最佳方法是什么?

(我正在使用子域的request_routing插件)

解决方法

实际上,您可能希望在mime_types.rb中设置mime类型并在respond_to块中执行它,因此它不会将其作为“text / html”返回:
Mime::Type.register "text/plain",:txt

然后,您的路线将如下所示:

map.robots '/robots.txt',:controller => 'robots',:action => 'robots'

对于rails3:

match '/robots.txt' => 'robots#robots'

和这样的控制器(把文件放在你喜欢的地方):

class RobotsController < ApplicationController
  def robots
    subdomain = # get subdomain,escape
    robots = File.read(RAILS_ROOT + "/config/robots.#{subdomain}.txt")
    respond_to do |format|
      format.txt { render :text => robots,:layout => false }
    end
  end
end

冒着过度工程的风险,我甚至可能会试图缓存文件读取操作…

哦,是的,你几乎肯定要删除/移动现有的’public / robots.txt’文件.

精明的读者会注意到你可以轻松地用RAILS_ENV代替子域名……

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...