【发布时间】:2016-10-14 21:25:43
【问题描述】:
我一直在玩 Elm 导航包,目前我正在使用 Hop 框架,我想知道是否有办法防止 cannot GET /<url> 消息在 url 前面没有井号(例如:#<url>)。
【问题讨论】:
标签: elm
我一直在玩 Elm 导航包,目前我正在使用 Hop 框架,我想知道是否有办法防止 cannot GET /<url> 消息在 url 前面没有井号(例如:#<url>)。
【问题讨论】:
标签: elm
我感觉这可能是服务器配置问题。为了使#-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();
}
]
【讨论】: