JS脚本无法跳转页面,如何避免content.inc被直接访问?
嘿,我来帮你理清问题出在哪儿,一步步解决~
首先,你的JS脚本有致命语法错误,这是浏览器忽略它的核心原因
你写的判断条件里用了单等号 =,这是赋值操作,不是相等判断!而且filename.indexOf("index.php")是一个返回值(不是变量),你没法给它赋值,浏览器执行到这行直接就报错了,整个脚本都跑不起来。
正确的写法应该用**三等号===**做严格相等判断:
var url = window.location.pathname; var filename = url.substring(url.lastIndexOf('/') + 1); // 用===判断当前文件名不包含index.php if (filename.indexOf("index.php") === -1) { var frame_name = "index.php?open=" + filename; window.location.replace(frame_name); }
第二个可能的坑:服务器没把.inc文件当成HTML解析
如果你的服务器默认把.inc文件识别为纯文本或者二进制文件,浏览器会直接显示文件内容,根本不会解析其中的JS脚本。你需要配置服务器让.inc文件以HTML类型返回:
- 如果你用Apache,在网站根目录的
.htaccess里加这一行:AddType text/html .inc - 如果你用Nginx,在站点配置里的
types块添加:types { text/html inc; }
额外优化:避免无限循环+更精准的判断
之前你遇到过无限循环,其实只要判断逻辑精准就不会出现。比如我们可以只针对.inc文件跳转,这样index.php加载content.inc时,页面URL是index.php,脚本不会触发跳转:
var url = window.location.pathname; var filename = url.substring(url.lastIndexOf('/') + 1); // 只对.inc后缀的文件执行跳转 if (filename.endsWith('.inc')) { var frame_name = "index.php?open=" + filename; window.location.replace(frame_name); }
按这个步骤改完,应该就能解决问题啦~
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

