Перенаправить старый контент (.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 on
Постоянное перенаправление /XXX.php http://XYZ/XXX

По какой-то причине RoR не принял перемаршрутизацию в route.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, а журнал разработки пуст.   -  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 на URL-адреса www в Rails

person Simone Carletti    schedule 14.01.2010

Что вы подразумеваете под миграцией? Я рекомендую перенаправлять клиентов на использование URL-адресов RoR. Это можно сделать с помощью кодов состояния HTTP 301. См. http://en.wikipedia.org/wiki/HTTP_301:

Код состояния ответа HTTP 301 Moved Permanently используется для постоянного перенаправления.

Это можно сделать в настройках вашего 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