Node.js:立即重定向并发送页面

时间:2014-06-17 18:59:55

标签: javascript node.js url redirect

我试图在Node.js中为HTML页面构建简单的服务器。我的问题是,当我导航到(例如)http://localhost:8080/someDirectory时,浏览器认为someDirectory是文件(实际上,它被整体重定向到someDirectory/index.html)。

因此,当我<script src="./script.js"></script>时,它会尝试使用http://localhost:8080/script.js,而不是http://localhost:8080/someDirectory/script.js

我能想到的唯一解决方案是将浏览器重定向到/someDirectory/(最后用斜杠)。然后,浏览器正确地理解它是目录而不是文件。

我的问题是,我不想让我的服务器变慢,因为双重请求(客户端被重定向,发送另一个请求,然后最终获取网页)。是否有发送发送页面的可能性,只是通知浏览器更改,而不是使用302标题重定向?

<小时/> 编辑:当我访问在Apache服务器上运行的某个页面时,当我输入http://localhost/someDirectory时,会自动追加尾部斜杠。我只是好奇它是如何完成的(没有额外的PHP或javascript)。

2 个答案:

答案 0 :(得分:1)

不,它不可能,甚至不是正确的解决方案。你当然可以通过重定向发送内容,但它没有意义,因为浏览器不会显示它......它会立即跟随重定向。

如果您需要/someDirectory/,则与/someDirectory不同。你必须重定向。

答案 1 :(得分:0)

我建议使用history.replaceStateMDN)。这适用于大多数现代浏览器(大多数用户),但不适用于旧版浏览器。由于较旧的浏览器正在逐渐减少,随着时间的推移它应该变得不那么严重了。这应该可以解决问题 - 您需要将其直接粘贴到HTML标记中才能使其正常工作:

if ( !window.location.pathname.match(/\/$/) ) {
    if ( window.history && window.history.replaceState ) {
        window.history.replaceState(null, null, window.location.pathname + '/');
        document.write('<script src="./script.js"></script>');
    } else
        window.location.replace( window.location.pathname + '/');
} else {
    document.write('<script src="./script.js"></script>');
}