Sinatraルートでは、ルートの同じ部分に、必要な名前付きパラメータとオプションの名前付きパラメータの両方を含めることができます。Sinatraルートの必須パラメータとオプションパラメータ
オプションのルートパラメータが
get '/widgets.?:format?'
ここで正常に動作します。しかし、必要な名前のPARAMTERを組み合わせてみてください、と物事が壊れます。
get '/widgets/:id.?:format?'
/widgets/abc.jsonに対するリクエストは、abc.json全体をidパラメータとして渡します。
シナトラコンパイル正規表現は次のとおりです。
/^\/widgets\/([^\/?#]+)(?:\.|%2E)?([^\/?#]+)?$/
これは、 ':id'と一致する正規表現が欲しいものですが、残りの部分に'? 'を追加すると、それらは不合理になります。 [問題](https://github.com/sinatra/sinatra/issues/new)を開いてください。これを修正できる可能性があります。 –