Я просто столкнулся с той же проблемой.Поскольку здесь не было ответа о том, как это сделать без Passenger, я собираюсь документировать решение для Apache + CGI или FastCGI.
Хитрость заключается в том, чтобы переписать PATH_INFO
для Rack, и все упадетна место:
Настройка .htaccess
:
RewriteEngine On
RewriteRule ^(.*)$ sinatra_app.cgi [QSA,L,E=PATHINFO:/$1]
В вашем коде Синатры, прежде всего:
ENV['PATH_INFO'] = ENV['REDIRECT_PATHINFO']
Теперь все URL-адреса, такие как /subfolder/resource/123
, будут указывать правильный маршрут в приложении Sinatra.
В приведенном выше случае get '/resource/:id'
будет работать правильно, если приложение Sinatra было помещено в * 1022.*.