使用rails渲染动态robots.txt

时间:2017-02-14 19:32:39

标签: ruby-on-rails

我用rails动态替换rails中的默认robots.txt文件,我可以控制机器人在我的网站上看到的内容。

我删除了public / robots.txt文件。在我的PagesController中,我定义了一个机器人动作

def robots
  respond_to :text
  render 'pages/robots.txt.erb'
  expires_in 6.hours, public: true
end

在我的路线中

get '/robots.:format' => 'pages#robots'

我在网页浏览目录中创建了一个robots.txt.erb文件,仅在访问过的网站是生产网站时进行响应。

<% if Rails.env.production? %>
  User-Agent: *
  Allow: /
  Disallow: /admin
  Sitemap: http://www.example.com/sitemap
<% else %>
  User-Agent: *
  Disallow: /
<% end %>

当我访问网站和robots.txt路径时,我收到了错误

模板缺失

在页面视图目录中找不到机器人文件。我以前将此文件命名为robots.html.erb,然后将其重命名为robots.txt.erb。错误仍然存​​在。最后我刚刚删除了respond_to行,所以现在PagesController中的机器人动作只是

def robots
  render 'pages/robots.txt.erb'
  expires_in 6.hours, public: true
end

当我转到网址时,这是有效的。 我只是好奇这是否是一种好的做法,如果我通过删除respond_to动作而失去任何东西。

1 个答案:

答案 0 :(得分:1)

您需要先创建一个这样的路线

# config/routes.rb
#
# Dynamic robots.txt
get 'robots.:format' => 'robots#index'

现在我们必须创建一个名为robots的控制器

# app/controllers/robots_controller.rb
class RobotsController < ApplicationController
  # No layout
  layout false

  # Render a robots.txt file based on whether the request
  def index
    ...
  end

end

我希望这有助于:)