Posted at

rack-rewriteでURLの末尾に強制的にスラッシュを付ける

More than 5 years have passed since last update.

rackを使ったアプリケーションで

rewriteし、末尾に強制的にスラッシュを付ける方法。(英語ではtrailing slashというみたい)

Apacheでいう

Rewrite ^(.+[^/])$ $1/ [L,R]

これです


まえがき

※ここは読み飛ばして構いません

なぜ、これが必要になったかというと、jekyllのアプリケーションを作成ている時、

通常の

$ jekyll serve

を実行しアクセスしたときはhttp://0.0.0.0:5000/blogにアクセスしても自動的に末尾にスラッシュがつきます。

一方、unicornなどをrackを使った場合だと末尾にスラッシュはつかなくなり、リンクが上手く設定されない現象に困りました。

で、Apacheの用に、Rewrite Ruleを作ればできるのではいいのかなと。

通常であれはApacheやnginxなどで設定するのですが、herokuに上げるという事情があり、どうしてもアプリケーション側でやらないといけないということで、rack-rewriteを選択しました。


gemをインストール

rack-rewriteをインストール

gem 'rack-rewrite'


設定

config.ruに以下を追記

require 'rack/rewrite'

use Rack::Rewrite do
r301 %r{^([^.]+[^/])$}, '$1/'
end

.を含むファイル(cssファイルとか)の場合にはrewriteしないようにしてます。


参考:逆に末尾のスラッシュを外す方法

http://www.itsupportnewcastle.org.uk/rack-rewrite-remove-urls-trailing-slash/