2012-05-28 4 views
1

Я воссоздал веб-сайт и имею много 301 для обработки (от php URL-адресов до URL-адресов Rails).Rails Redirect 301 encoding

Он прекрасно работает с:

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

Моя проблема для такого рода старых ссылок (обеспечение от Google для веб-мастеров инструментов):

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

Кодирование не понял, потому что URL-адрес преобразуется браузером и Rails не поняли URL с «é» вместо «% C3% A9» ...

Как управлять такими адресами?

Второй вопрос: сколько маршрутов (301) можно добавить в файл routes.rb?

Thanks

ответ

2

В теории вы можете добавить много маршрутов, которые хотите. Тем не менее, мы не должны ставить ненужные данные в файл маршрутов, потому что он будет потреблять память, а для обработки всех логических маршрутов для каждого запроса требуется несколько раз, прежде чем он сможет перейти к контроллеру.

Если у вас довольно много 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 глобирование, чтобы соответствовать всем URL для перенаправления. Вы можете проверить больше об этом на http://guides.rubyonrails.org/routing.html

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

Для акцента символы, такие как «é», вам просто нужно сохранить это значение внутри базы данных. Для MySQL вы должны настроить сервер базы данных для хранения utf-8 и обновить соединение внутри базы данных.yml.

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 
+0

Спасибо за этот очень хороший ответ chamnap! –