1

サイトを PHP (Joomla + 純粋な php) から Ruby on Rails (Refinery CMS) に移動することを考えています。古いサイトには、拡張子が .html および .php のリンクがあります。古い URL を同じままにする方法はありますか (Google PageRank を下げたくありません)。config.use_custom_slugs = trueRefenery で configを使用しようとし ましたが、「.」がドロップされます。URLから。(store.phpなるstorephp、またFAQ.htmlなるfaqhtml・・・など)ありがとう。

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 は実際にカスタム スラッグを作成することを許可していません。

なぜ301ではないのか

説明しようとすると、ページ 1 への外部リンクが表示され、次にページ 1 がページ 2 への内部リンクを取得します。ページ 1 へのリンクは、リンクから 1000 のページ ランクを取得します。ページ 2 へのリンクは 900 を取得します。したがって、301 へのリンクは 1000 を取得し、301 が指すページは 900 を取得します。つまり、900 は完全に消えるよりはましですが、この状況を作成しないようにしています。それがどのように機能するかです。

4

2 に答える 2

0

wordpressからComfortable Mexican Sofa(別のRails CMSエンジン)に移行したときに、同様の問題に遭遇しました。

私はroutes.rbでこれを行うことになりました(ここにリダイレクトの1つのサンプルがあります(私はそれほど多くはありません-そのような合計15のリダイレクトがあります)、これはRefineryCMSでも使用できる一般的なRailsソリューションですおもう。

get '/2009/01/28/if-programming-languages-were-cars/', to: redirect('/blog/2009/01/if-programming-languages-were-cars-translated-into-russian')

これにより、実際には次のような適切なリダイレクトが生成されます (ブラウザでは表示できませんが、curl を実行すると、次のように表示されます。

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   

あなたのケースに固有

それが一般的なアプローチです。ただし、あなたがやろうとしていること (yourdomain.com/store.php のように .php で終わるすべての URL を yourdomain.com/store にリダイレクトする) については、このようなことができるはずです。これは、(新しい構造を正確にマッピングします。そうしないと、冒頭で述べたようなカスタム リダイレクトの束を作成するか、正規表現ブードゥーを実行する必要がある場合があります):

非リダイレクト ソリューション

ユーザーをリダイレクトしないでください。新しいページを同じアドレスにレンダリングするだけです (これは、質問に入れたソリューションのひねりです)。

リダイレクトを行いたくない場合は、これが多かれ少なかれ堅牢な唯一の方法です。

# 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)/,'')}"
}

これにより、レスポンス ヘッダー ステータス コード 200 が返されます。一般的には、パッセンジャーを介して PHP を提供しています (このサンプル URL を使用して私のサイトに対して curl -I を実行します。これらは私の要点を説明するための任意のパラメーターです)。

curl -I http://gorbikoff.com/about?name=nick
curl -I http://gorbikoff.com/about.php?name=nick

詳細に基づいてこれをいじる必要があるかもしれません (https と http など、いくつかの仮想ルートを個別にアドレス指定する必要があるかもしれません。 route.rb の優先順位についても覚えておいてください) が、これはうまくいくと思います。

編集 このソリューションは、Comfortable Mexican Sofa ですぐに使用できることに気付きました (フォーマットを無視するだけです (.php は .html と同じように扱われます)。ただし、cms ベースではない Rails 3 プロジェクトでソリューションを試しました。 (それは公開されていません)そして私の解決策はわずかな変更でまだ保持されています-私はそれを修正しました(混乱して申し訳ありません)。

公式ガイドも確認することをお勧めします (RefinderyCMS はまだ公式に Rails 4 をサポートしていないため、Rails 3.2.13 を使用していると想定しています)。

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

それが役立つことを願っています

于 2013-07-10T15:13:36.317 に答える