0

ウェブサイトがあり、ドメインは dnsimple にあり、サーバーは heroku にあります。heroku と dnsimple の両方で必要なすべての手順を ssl で構成しました。

これら 4 つの URL のいずれかを URL バーに入力すると、機能します。

しかし、問題は、Google で検索し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 つの Web サイトすべてを Google 検索コンソールに次のように追加しました。

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]

私が覚えている限り ( Rails の最近のバージョンでrecognize_path 削除されrecognize_pathたことを考えると) 、パスが見つからない場合にルーティング エラーが発生します。

関数に任意の文字列を渡していますが、関数はルーターに内部的に記述されたパスしか認識しません。

request.referrer次の 3 種類の URL が返されます。

  1. 空白: リファラーがない場合
  2. 外部 URL: 訪問者が別の場所をクリックしてアプリに到達したとき
  3. 内部 URL: 訪問者がアプリ内のどこかをクリックしたとき

3 番目のものを除くすべての場合でrecognize_path、エラーが発生します。このエラーは、デフォルトの Rails ハンドラーによってキャッチされ、404 として表示されます (認識されないルートは、本番環境では 404 になります)。

何をすべきかlocation_action_nameはわかりませんが、現在実装されているため、非常に壊れやすく、ほとんどの場合、アプリで 404 応答が発生します。

于 2016-11-02T14:40:25.920 に答える