【问题标题】:Rendering a dynamic robots.txt with rails使用 rails 渲染动态 robots.txt
【发布时间】:2017-02-14 19:32:38
【问题描述】:

我正在将 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 文件。我之前曾将此文件命名为 robots.html.erb,然后将其重命名为 robots.txt.erb。错误仍然存​​在。最后我刚刚删除了 respond_to 行,所以现在 PagesController 中的 robots 操作只是

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

这在我访问 url 时有效。 我只是好奇这是否是一种好习惯,以及我是否会因为删除 respond_to 操作而失去任何东西。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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
    

    我希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多