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
それが役立つことを願っています