Браузер не заменяет включаемый файл своим включаемым файлом - PullRequest
0 голосов
/ 17 мая 2018

Я абсолютный новичок в JS.

1) Что я пытаюсь сделать:

Мои веб-страницы состоят из index.php, который одинаков для всехфайлы каталога и одного из набора content.inc, например: index.php? open = content.inc.Это делается фрагментом PHP в index.php и работает хорошо.Тем не менее, Google индексирует все файлы content.inc.Затем браузер пользователя отображает content.inc без обрамления index.php.Этого я хочу избежать.Поэтому я добавляю скромный скрипт в начале каждого файла content.inc (который я бы преобразовал в функцию после запуска), чтобы сообщить браузеру, что вместо отображения content.inc он должен отображать index.php? Open = content.вкл.

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 голосов
/ 17 мая 2018

Виновная линия в вашем тестовом примере (см. Ответ JP de la Torre). А для улучшения приведем фрагмент демонстрации, как анализировать URL с помощью регулярного выражения:

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');
  }

Вы также можете использовать серверную часть .htaccess для перенаправления запроса на файлы .inc в вашем index.php, если включен mod_rewrite.

0 голосов
/ 23 мая 2018

Решение проблемы с включением файла INC, вызываемого отдельно, было предложено Бертраном во втором фрагменте кода выше. Это предполагает (правильно), что расширение inc опущено при замене.

Как я уже говорил выше, Firefox может зайти в бесконечный цикл, если он откроет файл PHP напрямую, то есть без привлечения локального хоста (с его модулем php).

0 голосов
/ 17 мая 2018

Для начала у вас есть ошибка в этой строке:

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

Это задание, которое всегда будет оцениваться как true, вам нужно использовать == или === (что должно быть более производительным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...