Я столкнулся с аналогичной проблемой при переходе от Wordpress к удобному мексиканскому дивану (другому движку Rails CMS).
Я закончил это на моих маршрутах.rb (вот пример одного из переадресаций (у меня нет много - всего 15 таких переадресаций), который является общим решением Rails, которое можно использовать по RefineryCMS а я думаю
get '/2009/01/28/if-programming-languages-were-cars/', to: redirect('/blog/2009/01/if-programming-languages-were-cars-translated-into-russian')
Это фактически генерирует правильный редирект, как так (impossible to see in the browser, но если вы свернуться вы увидите это:
curl http://gorbikoff.com/2009/01/28/if-programming-languages-were-cars/
<html>
<body>
You are being <a href="http://gorbikoff.com/blog/2009/01/if-programming-languages-were-cars-translated-into-russian">redirected</a>.
</body>
</html>
И если мы проверяем заголовки - мы видим. правильный ответ 301:
curl -I http://gorbikoff.com/2009/01/28/if-programming-languages-were-cars/
возвращает
HTTP/1.1 301 Moved Permanently
Content-Type: text/html
Content-Length: 158
Connection: keep-alive
Status: 301 Moved Permanently
Location: http://gorbikoff.com/blog/2009/01/if-programming-languages-were-cars-translated-into-russian
X-UA-Compatible: IE=Edge,chrome=1
Cache-Control: no-cache
X-Request-Id: 9ec0d0b29e94dcc26433c3aad034eab1
X-Runtime: 0.002247
Date: Wed, 10 Jul 2013 15:11:22 GMT
X-Rack-Cache: miss
X-Powered-By: Phusion Passenger 4.0.5
Server: nginx/1.4.1 + Phusion Passenger 4.0.5
Конкретная к вашему делу
Так что это общий подход. Однако за то, что вы пытаетесь сделать (перенаправить все URL-адреса, которые заканчиваются на .php, например yourdomain.com/store.php, на yourdomain.com/store), вы должны сделать что-то вроде этого.Это предполагает, что вы будете (сопоставить новую структуру точно, в противном случае вам может понадобиться создать кучу пользовательских перенаправляет как я уже упоминал в начале или сделать некоторые Regex вуду):
NON-Redirect Решение
Не перенаправляйте пользователя, просто отрисуйте новую страницу по тому же адресу (это вопрос, который вы задали в своем вопросе):
Это единственный способ, который более или менее прочный, если вы не хотите сделать перенаправление.
# routes.rb
# You don't need to match for .html - as they will be handled automatically by rails.
match '/*\.php', to: "application#php_path"
# application_controller.rb
# This doesn't have to be application controller,
# you may do this in your home_controller if you wish.
def php_path
require 'open-uri'
file = open "http://#{request.host_with_port}#{request.fullpath.gsub!(/(.php)/,'')}"
render :inline => file.read
end
Перенаправление Решение: Согласно Google 301 является предпочтительным способом https://support.google.com/webmasters/answer/93633?hl=en.
match '/*\.php', to: redirect {|params, request|
"http://#{request.host_with_port}#{request.fullpath.gsub(/(.php)/,'')}"
}
Это обеспечит заголовок ответа Status Code 200. Насколько мир обеспокоен вы служите PHP через пассажир (запустить завиток -I против моего сайта с помощью этой выборки URLs - это просто произвольный PARAMS иллюстрирующего моя точка)
curl -I http://gorbikoff.com/about?name=nick
curl -I http://gorbikoff.com/about.php?name=nick
Вам может понадобиться ерзать с этим на основе ваших специфических (HTTPS против HTTP, и т.д., и, возможно, некоторые виртуальные маршруты должны быть адрес отдельно. Также помните о приоритете в route.rb), но Я думаю, это может сработать для вас.
EDIT Я просто понял, что это решение работает из коробки в Комфортном мексиканском диване (он просто игнорирует формат (.php обрабатывается так же, как .html будет лечиться). Тем не менее я пытался мои решения в не- cms based rails 3 project У меня есть (это не публично), и мое решение все еще выполняется с небольшими изменениями - я только что исправил его (извините за путаницу).
Я предлагаю также проверить официальное руководство (я предполагаю, что вы находятся на Rails 3.2.13, поскольку RefinderyCMS официально не поддерживает Rails 4)
http://guides.rubyonrails.org/v3.2.13/routing.html#redirection
И проверить Rails API
http://api.rubyonrails.org/v3.2.13/classes/ActionDispatch/Routing/Redirection.html#method-i-redirect
Надежда, что помогает
Глядя на журналы отладки, он выглядит, когда я сохраняю период раздели перед обновлением SQL, но я вырыли через источник нефтеперерабатывающего завода и не могли найти никакой ссылки на эту отгонку в before_save или что-то еще. Это может быть вызвано тем, что драгоценный камень friendly_id лишит его за кулисами? – creativereason
Еще одна вещь, которая звучит так, как вы уже приняли решение, но похоже на то, что SEO дружелюбен, не жертвуя большим количеством рангов ... Вы считали, что вы делаете 301 перенаправление через файл .htaccess на новые (более дружественные к поисковой системе) URL-адреса от нефтеперерабатывающего завода? – creativereason
@creativereason, спасибо за комментарии. Я предложил 301 переадресацию, но одним из основных требований является сохранение старых urls = ( – Fivell