Пренасочване на старо съдържание (.html/.php и т.н.) към Ruby on Rails

Преминах на Ruby on Rails и текущият ми проблем е да пренасоча старото съдържание като XXX/dummy.html или XXX/dummy.php в RoR.

Какво точно е най-доброто решение за

  1. изолирано съдържание (XXX/onlyinstance.html)
  2. съдържание, което има вътрешна структура като XXX/dummy1.html, XXX/dummy2.html

http://guides.rubyonrails.org/routing.html не обяснява как да мигрирате стар съдържание.

Забележка: Промяната на старите връзки НЕ е опция. Уебсайтът е хостван, не е мой собствен сървър. Тъй като домейнът не е променен, решението за пренасочването му изглежда ненужно...би трябвало да има по-добро решение.

РЕДАКТИРАНЕ: Открих, че най-доброто решение всъщност е пренасочването му по начина, описан от weppos.

Така че добавете файл .htaccess в публичната директория и пишете

RewriteEngine на
Постоянно пренасочване /XXX.php http://XYZ/XXX

По някаква причина RoR не прие пренасочване в routes.rb... докато .html/.xml всичко върви добре, .php не функционира. Не разбрах защо. Тъй като отговорът на weppos беше най-добрият, ще му дам награда от 50 точки, но тъй като и другите отговори са валидни, ще гласувам за тях. Благодаря на всички ви


person Thorsten S.    schedule 14.01.2010    source източник
comment
Какво имаш предвид с пренасочване? Поставете HTML файловете във вашето rails приложение или го конвертирайте в Ruby on Rails, за да го замените действително?   -  person Veger    schedule 14.01.2010
comment
Имате стар уебсайт, написан на PHP/(X)HTML/каквото и да е. Сега възнамерявате да научите RoR и за да направите това на практика, искате освен изграждането на ново присъствие да конвертирате старите си връзки в RoR. Да, възможно е просто да поставите html файловете във вашите RoR директории на едно и също място (но намирам това за малко объркващо). Но ако използвате *.php окончания, сървърът ми извежда грешка 500 и development.log е празен.   -  person Thorsten S.    schedule 14.01.2010


Отговори (3)


Можете да направите това по много начини.

Най-добрият и най-ефикасен начин е да използвате вашия преден уеб сървър. Можете лесно да настроите някои конфигурации, за да пренасочите всички стари URL адреси към новите.

С Apache можете да използвате mod_alias и mod_rewrite.

Redirect /XXX/onlyinstance.html /new/path
RedirectMatch ˆ/XXX/dummy([\d])+\.html$ /new/path/$1

Това е най-ефективният начин както за сървър, така и за клиент, тъй като се обработва на ниво сървър без необходимост от инициализиране на интерпретатора на Ruby.

Ако не можете/не искате да се възползвате от настройките на сървъра, можете да решите да използвате самия Rails. Говорейки за производителност, най-ефективният начин е да използвате Rack мидълуер което е много по-ефективно от създаването на пълен контролер/действие.

class Redirector
  def self.call(env)
    if env["PATH_INFO"] =~ %r{XXX/onlyinstance\.html}
      [301, {"Content-Type" => "text/html", "Location" => "http://host/new/path/"}, "Redirecting"]
    else
      [404, {"Content-Type" => "text/html"}, "Not Found"]
    end
  end
end

Има и Rack плъгин, наречен Redirect, който предоставя хубав DLS за конфигуриране на пренасочвания с помощта на Rack мидълуер.

Само бележка под линия. Няма да създавам допълнителни маршрути с помощта на routes.rb, защото в крайна сметка ще дублирате URL адресите на вашия сайт и ще загубите допълнителна памет.

Вижте също Пренасочване на не-www заявки към www url адреси в Rails

person Simone Carletti    schedule 14.01.2010

Какво имате предвид под мигриране? Препоръчвам на пренасочване на клиентите да използват RoR URL адресите. Това може да стане с помощта на HTTP 301 кодове за състояние. Вижте http://en.wikipedia.org/wiki/HTTP_301:

Кодът на състоянието на HTTP отговор 301 Преместено за постоянно се използва за постоянно пренасочване.

Това може да стане в конфигурацията на вашия HTTP сървър.

person Community    schedule 14.01.2010

Трябва да предефинирате приложението си, тъй като Rails използва RESTful маршрутизиране (както вероятно сте чели). Така че, за да имате php файл, който обработва показване, създаване, унищожаване и т.н. на елементи, трябва да създадете модел на елемент, контролер и изгледи за различните действия.

Статичните HTML файлове можете да копирате в публичната директория, тъй като това е същото. Структурата, която сте използвали, все още може да бъде същата.

За да промените вашето маршрутизиране, трябва да добавите map.resource към вашия файл config/routes.rb. Това имплементира RESTful маршрутите към вашия контролер. За да започнете, използвайте уеб сървъра, предоставен от Rails (WEBrick), като въведете командата script/server. По-късно, когато имате повече опит, можете да помислите за превключване към друг сървър, ако WEBrick не е достатъчен.

Предлагам ви първо да започнете да пишете основно (блог) приложение с Rails, вижте тук. Така че виждате какви части използва Rails и как можете да ги използвате.

След това можете да идентифицирате тези части във вашето PHP решение и сте по-способни да конвертирате вашите страници. Поне аз следвах този подход, когато започнах да използвам/конвертирам към Rails от PHP.

person Veger    schedule 14.01.2010
comment
Връзки от други сайтове се отнасят към XYZ/xyz.php. Сега вашето намерение е, че ако е така. щракнете върху връзката, можете да пренасочите браузъра към всичко, дори и да не е PHP. Да приемем, че искате да стартирате автоматично XYZ/xyz като RoR приложение, ако е така. поставете XYZ/xyz.php във вашия браузър. Възможно ли е това програмно без достъп до пренасочване с кодове на състояние? Има ли нещо в RoR (като маршрутизиране), което може да направи това? - person Thorsten S.; 14.01.2010
comment
Никога не съм опитвал това, но нещо подобно би трябвало да е възможно: map.resource '/XYZ/xyz.php', :controller => :XYZController, :action => :index, сега RoR поема управлението с действието индекс. Оттам потребителят има пълен достъп до приложението. Но запазването на URL адреси, завършващи с .php, дори когато не се използва PHP, ми изглежда странно. Така че в един момент наистина имате нужда/искате да мигрирате към пълноценен RoR сайт... Защо не започнете сега и частично конвертирате всичко? - person Veger; 14.01.2010