我试图在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)。
答案 0 :(得分:1)
不,它不可能,甚至不是正确的解决方案。你当然可以通过重定向发送内容,但它没有意义,因为浏览器不会显示它......它会立即跟随重定向。
如果您需要/someDirectory/
,则与/someDirectory
不同。你必须重定向。
答案 1 :(得分:0)
我建议使用history.replaceState
(MDN)。这适用于大多数现代浏览器(大多数用户),但不适用于旧版浏览器。由于较旧的浏览器正在逐渐减少,随着时间的推移它应该变得不那么严重了。这应该可以解决问题 - 您需要将其直接粘贴到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>');
}