0

我们有一个网站,我们的域在 dnsimple 上,服务器在 heroku 上。我们在 heroku 和 dnsimple 上都使用 ssl 配置了所有必要的步骤。

当您将这 4 个 url 中的任何一个输入到 url bar 时,它就可以工作。

但问题是,当我在谷歌上搜索my website并点击链接时,它并没有打开,尤其是在 Internet Explorer 和 safari 中。它给出了 404 错误。

来自控制台的错误;

ActionController::RoutingError (No route matches "https://www.google.com.tr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiU0JX39YnQAhWJEiwKHSq2BpQQFggcMAA&url=https%3A%2F%2Fwww.example.com%2F&usg=AFQjCNFg0D1KFk0WGvYOfUoVzNm19KDBYw&bvm=bv.137132246,d.bGg"):

我已将所有 4 个网站添加到谷歌搜索控制台;

https://www.example.com
https://example.com
http://www.example.com
http://example.com

顺便说一句,它已经超过 24 小时了。对于 Internet Explorer,我尝试删除历史记录并刷新 dns 配置。仍然没有运气。

编辑: 没有检查作为推荐人。但是有一个代码可以在应用程序控制器中显示或不显示标题,但我认为这无关紧要;

before_filter :set_locale, :location_action_name
 def location_action_name
    if !logged_in?
      url = Rails.application.routes.recognize_path(request.referrer)
      @last_controller = url[:controller]
      @last_action = url[:action]


    end
  end

EDIT2: 我删除了下面的代码并推送到 heroku 现在它可以工作了。但这是为什么呢?

4

1 回答 1

1

该问题是由以下代码片段引起的:

  url = Rails.application.routes.recognize_path(request.referrer)
  @last_controller = url[:controller]
  @last_action = url[:action]

据我记得(我猜,鉴于在最新版本的 Railsrecognize_path 中已将其删除recognize_path)会引发路由错误,以防找不到路径。

您正在向函数传递任意字符串,但该函数仅识别路由器内部描述的路径。

request.referrer将返回 3 种不同类型的 URL:

  1. 空白:当没有推荐人时
  2. 外部 URL:当访问者点击其他地方并到达您的应用时
  3. 内部 URL:当访问者点击您应用中的某个位置时

在除第三种情况之外的所有情况下,recognize_path都会引发错误。该错误将被默认的 Rails 处理程序捕获并显示为 404(无法识别的路由在生产中导致 404)。

我不确定location_action_name应该做什么,但由于它现在已经实施,它非常脆弱,在大多数情况下,它会导致您的应用程序中出现 404 响应。

于 2016-11-02T14:40:25.920 回答