我正在尝试非常简单的振动路由:
void main()
{
config = new Config();
auto router = new URLRouter;
router.get("/*", serveStaticFiles(roothtml ~ "\"));
router.get("files/*", serveStaticFiles("./files/"));
router.any("*", &accControl);
router.any("/checkAuthorization", &checkAuthorization);
router.any("/login", &login);
router.post("/logout", &logout);
router.any("/upload", &upload);
router.any("/test", &test);
router.any("/dbdata", &dbdata);
// ...
}
文本文件123.txt
放在Files
文件夹
但是当我访问http://localhost:8080/Files/123.txt
时,我得到404
错误。
我做错了什么?
使用serveStaticFiles()
有点棘手。如果URLRouter
匹配请求路径,那么它将请求转发给serveStaticFiles()
。该函数根据另一个预配置的前缀检查请求路径。在您的示例中,前缀不匹配并且没有提供文件。配置正确的前缀有帮助:
auto fileServerSettings = new HTTPFileServerSettings;
fileServerSettings.serverPathPrefix = "/files/";
router.get("*", serveStaticFiles("files/", fileServerSettings));
使用"*"
或"/files/*
进行路由匹配无关。它只影响哪些路由被转发到serveStaticFiles()
试试这个:
router.get("files/*", serveStaticFiles("./files/"));
我不知道路由是如何工作的,但我得到了下一个变体:
router.get("/rasters_previews/*", serveStaticFiles("./files/"));
// url would be localhost/rasters_previews/101_005329_2_0_02.jpg