我有一个包含多个子域的站点,我希望命名的子域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代替子域名……