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"