设置location.href='/foo'生产环境正常,IIS环境路径跳转异常咨询
问题解决:IIS部署子路径下location.href跳转异常
问题原因
你写的location.href = '/foo'用的是根相对路径,这种路径会直接基于域名的根目录(比如http://localhost/)跳转,而当应用部署在IIS的/myapp子路径下时,就会跳过子路径直接跳到http://localhost/foo,而非预期的http://localhost/myapp/foo。
解决方案
1. 使用相对路径(无开头斜杠)
如果当前页面的路径是应用根目录下的页面(比如http://localhost/myapp/),直接用不带斜杠的相对路径:
location.href = 'foo';
⚠️ 注意:如果当前页面在应用的子目录下(比如http://localhost/myapp/sub/page),这种写法会跳到http://localhost/myapp/sub/foo,而非应用根下的/foo。
2. 动态获取应用基础路径(推荐)
通过当前页面的URL动态提取应用的部署路径,再拼接目标路径,适配不同的部署环境:
// 提取当前应用的基础路径(比如从http://localhost/myapp/page中得到/myapp) const pathSegments = window.location.pathname.split('/').filter(segment => segment); const basePath = pathSegments.length > 0 ? `/${pathSegments[0]}` : ''; location.href = `${basePath}/foo`;
或者利用URL API更简洁地处理:
// 基于当前页面的origin和应用路径构造目标URL const targetUrl = new URL('foo', window.location.origin + window.location.pathname.split('/').slice(0, -1).join('/') + '/'); location.href = targetUrl.href;
3. 硬编码基础路径(仅适用于固定部署路径)
如果应用的部署路径永远是/myapp,可以直接写绝对路径:
location.href = '/myapp/foo';
⚠️ 缺点:部署路径变更时需要同步修改代码,不灵活。
内容的提问来源于stack exchange,提问作者buga
相关产品推荐
相关产品推荐

