Help us understand the problem. What is going on with this article?

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/

kyohei8
おはようございます。
http://www.twopipe.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away