Rails + Nginx環境で強制的にURLの最後に / を付ける方法
表題の通り、Rails + Nginx環境で強制的にURLの最後に / を付ける方法です。
そもそもなぜ付ける必要があるのか?
そうです。Google大先生に怒られたことがきっかけです。
Search ConsoleのHTMLの改善の項目で、重複するメタデータとして
/item/12345/ /item/12345
こんな感じのURLが重複してるよ!と言われたんです。
そんなぁ、、、と思いつつも、最後に/を付ける方向で直しました。
対処方法
対処場所としては、RailsとNginxで対処しました。 最悪Nginxだけやっとけば、統一はされますが、一応Rails側でも対応しています。
Rails
application.rbに以下を追加します。
config.action_controller.default_url_options = { :trailing_slash => true }
これで、items_path とかroutes経由でのURLの後ろに「/」がついてくれます。
ただしこれだと、「/item/12345」を直接入力されてしまうと、「/item/12345」のままになります。
Nginx
なので、Nginx側にも以下の様にrewiteを入れて、強制的に最後に「/」を付けます。
rewrite ^(.*[^/])$ $1/ permanent;
これで、スラッシュアリに統一してくれます。
関連記事
- 作者: 久保達彦,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る