Web Scotty: файл не найден при обслуживании статических файлов

Это должно быть что-то действительно глупое. Я только начал играть со Скотти и не могу правильно обслужить статический контент.

import Network.HTTP.Types
import Web.Scotty
import qualified Data.Text as T
import Data.Monoid (mconcat)
import Data.Aeson (object, (.=))
import Network.Wai.Middleware.Static

main = scotty 3000 $ do
  middleware $ staticPolicy (noDots >-> addBase "static")
  get "/" $ file "index.html"

Довольно просто Это то, что вы найдете в нескольких скотти-уроках. Но это не работает по какой-то причине. Доступ через "/" в браузере дает мне возможность "файл не найден". Если я наберу '/index.html' в браузере - это работает. Но это неправильно! Я хочу, чтобы он был доступен через '/', но не через /index.html. Он игнорирует корень и получает файл html напрямую. Как я могу обслуживать index.html через корень '/'? Вокруг не так много информации, и пара обучающих программ, которые я нашел, указывают на приведенный выше пример или аналогичный, который работает не так, как ожидалось.

Я попытался установить заголовки в 'text / html', а что нет... Не повезло.

1 ответ

Решение

Если я наберу '/index.html' в браузере - это работает. Но это неправильно! Я хочу, чтобы он был доступен через '/', но не через /index.html.

Но это именно то, что staticPolicy промежуточное программное обеспечение для! Всякий раз, когда запрос соответствует политике (в данном случае файлы в./static/), он будет отфильтрован staticPolicy, Если вы не хотите такого поведения, удалите промежуточное программное обеспечение.

Доступ через "/" в браузере дает мне возможность "файл не найден".

Поскольку действие промежуточного программного обеспечения не устанавливает относительный путь для следующих команд. Вам нужно дать полный путь для file:

main = scotty 3000 $ do
  get "/" $ file "./static/index.html"
Другие вопросы по тегам