Перенаправить старый контент (.html / .php и т. Д.) В Ruby on Rails - PullRequest
3 голосов
/ 14 января 2010

Я перешел на 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 в публичный каталог и пиши

ПереписатьEngine на
Перенаправление перманент /XXX.php http://XYZ/XXX

По какой-то причине RoR не принимал перенаправление в маршрутах rout.rb ... while .html / .xml все идет хорошо, .php не работает. Я не выяснил почему. Потому что ответ Веппо был лучшим, я награжу его щедростью в 50 баллов, но, как и остальные ответы, Я тоже буду голосовать за них. Спасибо всем

Ответы [ 3 ]

4 голосов
/ 14 января 2010

Вы можете сделать это несколькими способами.

Лучший и самый эффективный способ - использовать ваш интерфейсный веб-сервер. Вы можете легко настроить некоторые конфигурации, чтобы перенаправить все старые 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

2 голосов
/ 14 января 2010

Вы должны переопределить свое приложение, так как Rails использует RESTful маршрутизацию (как вы, вероятно, читали). Таким образом, чтобы иметь php-файл, который обрабатывает показ, создание, уничтожение и т. Д. Элементов, вам необходимо создать модель элемента, контроллер и представления для различных действий.

Статические HTML-файлы, которые вы можете скопировать в публичный каталог, поскольку это то же самое. Структура, которую вы использовали, может быть такой же.

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

Я предлагаю вам сначала написать основное (блог) приложение с Rails, см. здесь . Итак, вы видите, какие части использует Rails и как вы можете их использовать.

После этого вы сможете идентифицировать эти части в своем PHP-решении и сможете лучше конвертировать ваши страницы. По крайней мере, я следовал этому подходу, когда начал использовать / конвертировать в Rails из PHP.

2 голосов
/ 14 января 2010

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

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

Это можно сделать в конфигурации вашего HTTP-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...