1

私はウェブサイトを再作成し、処理する301がたくさんあります(phpURLからRailsURLまで)。

それは完全に動作します:

match "/produits/les-dallages/dallage-riva.html", :to => redirect("/produits/dallages/dalle-riva")

私の問題は、この種の古いURL(Googleウェブマスターツールから提供)です。

"/produits/les-pavages/paves-carres/item/48-pav%C3%A9s-carr%C3%A9s.html"

URLがブラウザによって変換され、Railsが「%C3%A9」ではなく「é」を含むURLを理解しなかったため、エンコーディングが理解されません...

この種のURLを管理する方法は?

2番目の質問:routes.rbファイルにいくつのルート(301)を追加できますか?

ありがとう

4

1 に答える 1

2

理論的には、必要なルートを多数追加できます。ただし、メモリを消費するため、routesファイルに不要なものを入れないでください。また、コントローラに送信する前に、すべてのリクエストのすべてのルートロジックを処理する必要がある場合があります。

ルートファイルを台無しにするのではなく、リダイレクトを実行するURLが非常に多い場合は、より柔軟なコードを記述できるため、リダイレクトを実行するためだけにコントローラーを作成することをお勧めします。from_urlたぶん、 (古いURL)とnew_url(リダイレクト用)を保存するテーブルを作成することができます。次に、新しいコントローラー内で、データベースで古いURLを見つけて、リダイレクトを実行します。

class RedirectionController < ApplicationController
  def index
    redirect = Redirection.find_by_from_url(request.request_uri)
    if redirect
      redirect_to redirect.to_url, :status => :moved_permanently
    else
      render 'public/404', :status => :not_found, :layout => false
    end
  end
end

最後に、Route Globbingを使用して、リダイレクト用のURLと一致させます。詳細については、 http: //guides.rubyonrails.org/routing.htmlをご覧ください。

match '/produits/*' => 'redirection#index'

'é'のようなアクセント文字の場合、この値をデータベース内に格納する必要があります。MySQLの場合、database.yml内の接続を保存utf-8および更新するようにデータベースサーバーを構成する必要があります。

encoding: utf8
collation: utf8_unicode_ci

次のコードでリダイレクトを試みることができます。それは完全に大丈夫です。# encoding: UTF-8これらのアクセント文字があるため、ファイルの先頭にある必要があります。

# encoding: UTF-8
class RedirectionController < ApplicationController
  def index
    redirect_to "produits/les-pavages/paves-carres/item/48-pavés-carrés"
  end
end
于 2012-05-28T17:02:49.887 に答える