2017-02-09 2 views
2

В моей общей папке у меня есть файл index.html. Я хочу, чтобы иметь возможность просто использовать URL локальный: 4567 для отображения страницы (без отображения локальный: 4567/index.html)Sinatra Static Page

Это мой текущий рубиновый скрипт:

require 'sinatra' 

set :public_folder, 'public' 

get '/' do 
    redirect '/index.html' 
end 

Я попытался удалить оператор перенаправления, но в url все еще есть index.html.

ответ

3

Вы можете использовать send_file здесь:

get "/" do 
    send_file 'public/index.html' 
end 

Вам необходимо предоставить полный путь к файлу из рабочего каталога (т. не только путь под public), и это работает только с корневым URL-адресом, он не будет обслуживать index.html страниц для каталогов в целом. Если вы хотите, вам, вероятно, потребуется настроить отдельный веб-сервер перед Sinatra и настроить его соответствующим образом.

+0

Работает отлично !! Большое спасибо – user2843365

0

Идея перенаправления заключается в том, чтобы заставить браузер сделать новый запрос туда, куда вы перенаправляетесь. Как вы не хотите, чтобы изменить URL, у вас есть два возможных решения:

  1. Rewrite вместо редиректа. сам Синатра не обеспечивает такую ​​функциональность, но вы можете легко использовать стойки промежуточного уровня:

    require 'rack/rewrite' 
    
    use Rack::Rewrite do 
        rewrite '/', '/index.html' 
    end 
    
  2. Подавать index.html содержимое при запросе корневого пути:

    get '/' do 
        File.read("#{APP_ROOT}/public/index.html") 
    end 
    
+0

@ Способ подавления файлов в матах лучше. – ndn