Elm导航防止无法GET

Elm navigation prevent cannot GET

我一直在玩 Elm 导航包,目前我正在使用 Hop 框架,我想知道是否有办法在没有井号的情况下阻止 cannot GET /<url> 消息url 前面(例如:#<url>)。

我感觉这可能是服务器配置问题。要使 #-less url 正常工作,您需要将服务器配置为提供相同的 .html,而不管请求 URL。一旦提供,您的 Elm 应用程序就可以加载并从那里获取它。

为了补充 Peter Szerzo 的回答,我发现 an issue at the Github page of browser-sync 页面与我遇到的问题大致相同。解决方法如下:

const modRewrite = require("connect-modrewrite");

gulp.task("serve", () => {
    browserSync.init(null, {
        middleware: [
            modRewrite([
                "!\.\w+$ /index.html [L]"
            ]),
        ]
    }
}

如果你打算使用 Apache 或 Nginx,你当然需要使用不同的解决方案。这是特定于浏览器同步的。

更新

我 运行 进入另一个问题,上面的解决方案不起作用,因为它会从不同的位置再次获取项目。例如:手动导航到 /blog/1 会工作得很好,因为在更改到该位置时没有任何 HTTP 请求,但是在重新加载页面时,页面将从 /blog 获取文件,这上面的解决方案没有处理。这就是我解决后一个问题的方法:

middleware: [
    (req, res, next) => {
        const splitRequestUrl = req.url.split("/");
        const fileName = splitRequestUrl[splitRequestUrl.length - 1];

        //I have a seperate paths file
        //Change paths.serve to whatever folder you want to specify as your base folder
        if (fs.existsSync(path.join(process.cwd(), paths.serve, fileName)))
            req.url = `/${fileName}`;
        else
            req.url = "/";

        next();
    }
]