Rails Redirect 301 de codificare

Am recreat un site web și am o mulțime de 301 de mâini (de la url-uri PHP la urls Rails).

Funcționează perfect cu:

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

Problema mea este pentru acest tip de URL-uri vechi (oferind de la Google Webmaster Tools):

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

Codificarea nu este înțeleasă deoarece url este transformat de browser și Rails nu înțelege adresa URL cu "é" în loc de "% C3% A9" ...

Cum să gestionați acest tip de adrese URL?

A doua întrebare: câte rute (301) pot adăuga în fișierul routes.rb?

Mulțumiri

0

1 răspunsuri

În teorie, puteți adăuga mai multe rute pe care le doriți. Cu toate acestea, nu ar trebui să punem în mod inutil în rutele de fișier, deoarece ar consuma memorie, și este nevoie de unele ori pentru a procesa toate rutele logice pentru fiecare cerere înainte de a putea merge la controler.

În cazul în care aveți destul de multe url-uri pentru a face redirecționarea, mai degrabă decât să vă confruntați cu fișiere rute, aș recomanda să creați un controler doar pentru a face redirecționare, pentru că ați putea scrie un cod mult mai flexibil. Poate că ați putea crea un tabel pentru stocarea from_url (old url) și new_url (pentru redirecționare). Apoi, în interiorul unui nou controler, găsiți pur și simplu vechea adresă URL din baza de date și efectuați o redirecționare.

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

Last, use Route Globbing to match any urls for redirection. You can check out more about it on http://guides.rubyonrails.org/routing.html

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

Pentru caracterele de accent precum "é", pur și simplu trebuie să stocați această valoare în baza de date. Pentru MySQL, ar trebui să configurați serverul bazei dvs. de date pentru a stoca utf-8 și să actualizați conexiunea în baza de date.

encoding: utf8
collation: utf8_unicode_ci

Puteți încerca să redirecționați cu următorul cod. Funcționează perfect. Acesta trebuie să aibă # encoding: UTF-8 la începutul fișierului, deoarece există acele caractere de accent.

# encoding: UTF-8
class RedirectionController < ApplicationController
  def index
    redirect_to "produits/les-pavages/paves-carres/item/48-pavés-carrés"
  end
end
0
adăugat
Vă mulțumim pentru acest răspuns foarte bun!
adăugat autor alex.bour, sursa