浏览器不会通过包含文件

时间:2018-05-17 15:47:42

标签: javascript methods

我是JS的绝对初学者。

1)我正在尝试做什么:

我的网页由index.php组成,对于目录的所有文件和一组content.inc都是相同的,如下所示:index.php?open = content.inc。这是通过index.php中的PHP片段完成的,并且效果很好。 但是,Google将所有content.inc文件编入索引。然后用户的浏览器显示content.inc而不使用框架index.php。这是我想避免的。因此,我在每个content.inc的开头添加一个适度的脚本(我会在运行后将其转换为函数)告诉浏览器,而不是显示content.inc,它应该显示index.php?open = content。 INC。

2)我不可行的解决方案:

var url = window.location.pathname;
var filename = url.substring(url.lastIndexOf('/')+1);
if (filename.indexOf("index.php") = -1)
    { var frame_name = "index.php?open="+filename;
        window.location.replace(frame_name);
     };

浏览器(Firefox 60)忽略了这一点;它显示content.inc。 (我也有这个脚本的版本,让浏览器进入无限循环。)

这里有什么问题?请帮忙!

PS:请放心,我已经对这个问题进行了大量的网络搜索,发现很多关于location.replace的投诉进入无限循环;但没有一个符合我的情况。但是,我很感激地接受一个有用的链接作为答案。

3 个答案:

答案 0 :(得分:0)

对于初学者,此行中有错误:

if (filename.indexOf("index.php") = -1)

这是一项作业,并且总是评估为true,您需要使用=====(这应该更高效)。

答案 1 :(得分:0)

您的测试案例中有罪(见JP de la Torre的回答)。为了改进,这里有一个片段来演示如何使用正则表达式分析网址:



function redirect(url) {
  if(url && url.indexOf('.inc') >= 0) {
    return url.replace(/\/(\w+)\.inc/, '/index.php?open=$1');
  }
  return url;
}

let urls = [
  window.location.href,
  'http://google.fr',
  'http://example.com/index.php?open=wazaa',
  'http://example.com/wazza.inc'
];

urls.forEach(url => {
  console.log(url, ' => ', redirect(url));
});




正则表达式将捕获/和.inc之间的任何文本。您可以使用它作为$ 1的替换值。

适用于您的情况,您只需要:

 if(window.location.href.indexOf('.inc') >= 0) {
    window.location.href = window.location.href.replace(/\/(\w+)\.inc/, '/index.php?open=$1');
  }

如果启用了mod_rewrite,您还可以使用.htaccess服务器端重定向index.php上的.inc文件请求。

答案 2 :(得分:0)

包含单独调用的INC文件的问题的解决方案是Bertrand在上面的第二个代码片段中提出的解决方案。它预先假定(正确地)在替换中省略了inc扩展名。

正如我上面所报道的,如果Firefox直接打开PHP文件,即没有涉及本地主机(带有php模块),Firefox可能会进入无限循环。