1

私が見ることができる限り、状況が何であるかを徹底的に説明しようと思います。

サイトの特定の部分にページキャッシュを使用するRailsアプリがあります。Google Analyticsを調べてみると、自分のドメインがリファラーであることに気づきました。さらに調査したところ、自分のドメインをリファラーとしてこれらのページの1つにアクセスすると、リンクは別のドメイン名を指していますが、ページは正常に表示されることがわかりました。例えば:

私はdomain.comにいます。domain.com/someones_profileにアクセスし、リンクにカーソルを合わせると、anotherdomain.com / someones_profile/aboutと表示されます。ここで、リンクをクリックすると、anotherdomain.com / someones_profile / aboutに移動しますが、サーバーでアクセスされているのは私のページです(ログで確認されます)。

未使用のドメイン名の1つを取得し、AレコードをサーバーのIPに変更して、これをテストしました。次に、ページキャッシュディレクトリをクリアし、設定したドメインdomain2.com/someones_profileを使用してキャッシュ可能なページにアクセスすると、リンクがdomain2.com/someones_profileとしてキャッシュされました。

うまくいけば、この説明は理にかなっています。私のキャッシュに「侵入」しているドメインは、私が知らない誰かに属しており、その意図は決して悪意のあるものではないようですが、Railsにはこのようなものを回避するための何らかの組み込みメソッドがあるのではないかと思いました。page_cacheリンクに、リファラードメインではなく、特定のドメインを使用するように強制するようなものです。

何か助けていただければ幸いです。自分で何かを書くよりも、組み込みのRailsメソッドを使用したいのですが、怠け者だからではないかもしれません。

4

2 に答える 2

1

わかりました、私はあなたの問題を抱えていると思います。xxx_urlの代わりにxxx_pathを使用してページにリンクを作成するのはどうですか?これにより、相対パスのみが生成されます。ドメイン名はhtmlドキュメントに書き込まれません。_urlのビューを検索して置換し、それらを_pathに変更します。

したがって、たとえば、これがビューにある場合:

<%= link_to "View all posts", posts_url %>

次のように変更します。

<%= link_to "View all posts", posts_path %>

ちなみに、この回答は、URLをビューに直接配置するのではなく、ルートを使用してリンクを作成していることを前提としています。

于 2010-12-08T02:08:01.147 に答える
0

屈折ジェムを使用して、単一の定義済みホストに送信されないすべてのアクセスをその単一の定義済みホストにリダイレクトしてみてください。これにより、重複するコンテンツが削除されるため、ページのランキングも上がります。

# config/initializers/refraction_rules.rb
Refraction.configure do |req|
  if req.host == "www.you-like-this-host.com"
    # configure other redirects here
    # eg. I'm using this to migrate URLs from the legacy application
    # to this new application (eg when migrated from PHP to Rails)
  else
    # this is not your hostname, redirect!
    req.permanent! :host => "www.you-like-this-host.com"
  end
end

屈折はラックスタックの早い段階で実行されるため、かなり軽量です。たとえば、Apacheのmod_rewriteは乗客に対して確実に機能しないため、屈折を好みます。

ミドルウェアプラグインとしてロードしてください:

# config/environments/production.rb
config.middleware.insert_before ::Rack::Lock, ::Refraction, {}

ホスト名のリンクはページキャッシュに表示されないようにする必要があります。ホスト名なしでインサイトURLを生成してもよろしいですか?link_toこの方法で(現在のホスト名をまたはに渡してurl_for)一意のリンクを作成しようとした可能性があります。そのために屈折を使用して、コードをクリーンアップしてください。

于 2010-12-08T00:23:21.093 に答える