.htacces реализован — URL обновляется некорректно

#php #refresh

#php #обновить

Вопрос:

Я использую .htaccess. У меня есть правило:

 RewriteRule ^pg/([a-zA-Z0-9/_-] )?$ index.php?page=$1 [QSA]
  

На одной из моих страниц есть URL: http://domain.com/pg/page1

На этой странице есть мета-тег обновления:

 <meta http-equiv='refresh' content='0;URL=pg/page2'>
  

Теперь, когда эта страница обновляется .. формируется новый URL-адрес:, http://domain.com/pg/pg/page2 т.Е. pg появляется дважды.

Я уже указал базовый тег href в заголовке как:

 <base href='http://domain.com'>
  

Почему pg/ появляется дважды и как от этого избавиться.
Спасибо.

Ответ №1:

Убедитесь, что вы начинаете путь с косой черты ( '/' ), например '/pg/page1'

Комментарии:

1. Спасибо. Это сработало. Могут ли быть какие-то другие проблемы из-за этого?

2. Только если вы позже переместите веб-сайт в подкаталог. Предшествующая косая черта сообщает браузеру (и, соответственно, веб-серверу, как только запрос сделан), что ресурс должен быть запрошен из корневого веб-каталога, а не из текущей папки. Если вы когда-либо переместите сайт в подкаталог (с точки зрения веб-интерфейса, то есть, например www.example.com/my_sub_directory/pg/page1 ) вам нужно будет указать этот подкаталог после косой черты, но перед остальной частью пути.

3. Еще одна проблема заключается в том, что у меня есть страница по адресу: smstongue.com/pg/d/help/faq и там есть ссылки <a href=’#1′>. Но при нажатии на эту ссылку я попадаю в smstongue.com/#1 и не smstongue.com/pg/d/help/faq#1 . Я использовал <базовый href=» smstongue.com «> в голове, и я думаю, что из-за этого это происходит. Пожалуйста, предложите, какие изменения необходимо внести.

4. Проблема в вашем <base> теге, поэтому у вас есть несколько вариантов. Вы можете удалить <base> тег и использовать абсолютные пути, конечно, или вы можете быть немного хитрее. Я замечаю, что ваш menu.js файл содержит ссылку на jquery, хотя вы не включаете jquery на эту страницу. Без jQuery: document.onreadystatechange = function () { var f = document.getElementsByTagName('base')[0]; var g = f.parentNode; g.removeChild(f); document.onreadystatechange = null; }; С помощью jQuery: $(function(){$('base').remove();}); .

5. В любом случае, однако, это связано с base тегом, так что это то, на исправлении чего вам нужно сосредоточиться. Вы всегда можете указать абсолютный путь в ссылке <a> .