2013-07-05 3 views
1

У меня есть идея переместить сайт с PHP (Joomla + pure php) на Ruby on Rails (CASE). У старого сайта есть ссылки с расширениями .html и .php. Есть ли способ сохранить старые URL-адреса одинаково (я не хочу потерять Google PageRank)? Я попытался использовать конфигурацию config.use_custom_slugs = true с помощью Refenery, но она отбрасывает '.' от url. (store.php будет storephp, также FAQ.html будет faqhtml ... и т.п.) Любая помощь оценена! Благодарю.переход от Joomla to Refinery

В Rails я могу сделать это следующим способом

#Application Controller 
    def unknown_path 
    #it works for all urls, here I can load page with needed slug 
    render :text => "#{request.fullpath}" 
    end 

#routes.rb 
    match "*a", :to => "application#unknown_path" #in the end 

И это будет делать какой-либо URL работает. Так что я мог бы использовать пользовательский слизняк, если она существует, или поднять 404

Но CMS dosn't позволяет создавать действительно пользовательские слизень

Почему не 301

Пытаясь объяснить: вы получаете внешнюю ссылку ближайшей на стр. 1, то ваши Page 1 ссылки внутри страницы на страницу 2. Ссылка на страницу 1 получает 1000 ссылок на страницу из ссылки. Ссылка на страницу 2 получает 900 Поэтому ссылка на 301 получает 1000 и страницу, на которую 301 указывает, что она получает 900. Так: 900 лучше, чем вообще исчезает, но я стараюсь избегать создания этой ситуации. Вот как это работает.

+0

Глядя на журналы отладки, он выглядит, когда я сохраняю период раздели перед обновлением SQL, но я вырыли через источник нефтеперерабатывающего завода и не могли найти никакой ссылки на эту отгонку в before_save или что-то еще. Это может быть вызвано тем, что драгоценный камень friendly_id лишит его за кулисами? – creativereason

+0

Еще одна вещь, которая звучит так, как вы уже приняли решение, но похоже на то, что SEO дружелюбен, не жертвуя большим количеством рангов ... Вы считали, что вы делаете 301 перенаправление через файл .htaccess на новые (более дружественные к поисковой системе) URL-адреса от нефтеперерабатывающего завода? – creativereason

+0

@creativereason, спасибо за комментарии. Я предложил 301 переадресацию, но одним из основных требований является сохранение старых urls = ( – Fivell

ответ

0

В соответствии с my answer on Refinery's issue tracker, где это также было задано, вам нужно сделать это в Rails? Как насчет переписывания запроса, прежде чем он даже попадет в Rails с использованием прокси-программного обеспечения, такого как nginx with HttpRewriteModule?

+0

Здравствуйте, @parndt, я обновил свой ответ, описав способ, как это сделать это в рельсах. – Fivell

+0

nginx не для меня, потому что это уменьшает Google PR страниц – Fivell

0

Я столкнулся с аналогичной проблемой при переходе от 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

Надежда, что помогает

+0

Спасибо за ответ, но я не буду использовать 301 перенаправление из-за потери рейтинга Google PAge для каждой такой страницы. – Fivell

+0

Дайте мне несколько минут, я думаю, что придумал решение, которое может сработать для вас. – konung

+0

@Fivell Проверьте мой обновленный ответ, дайте мне знать, если это то, что вы искали. – konung