Как остановить mod_rewrite от добавления ссылок на url?

Я ожидаю, что ответ будет таким простым, что мне захочется плакать, но я не могу понять это. Я новичок в mod_rewrite.

Я хотел изменить свои ссылки с таких вещей, как domain.com/?p=about, на domain.com/about* / * (с завершающей косой чертой), и он отлично работает, но всякий раз, когда я перехожу к ссылке, она добавляет новые ссылку на обратную ссылку. Например, у меня есть связь и контактная ссылка. Если я нажму на него, перейдет к domain.com/about/, то, если я нажму контакт, он перейдет к domain.com/about/contact/ и продолжит добавлять ссылки в конец URL-адреса. Если я нахожусь в домене.com и нажимаю ссылку (примерно в этом случае), она перейдет на домен.com/about/, и если я нажму еще 4 раза, в моей адресной строке будет указано «domain.com/ about / about / about / about / about / "Я воспроизвел это в очень простом примере ниже, что я делаю неправильно?

.htaccess

RewriteEngine On RewriteRule ([a-zA-Z0-9]+)/$ index.php?p=$1 

index.php

 <a href="about/">about</a> | <a href="contact/">contact</a><br><br> <?php if(!isset($_GET['p'])) { echo "home"; } else { echo $_GET['p']; } ?> 

Спасибо за помощь!

edit: Он работает нормально, если я использую абсолютный путь, но я бы предпочел, если мне не обязательно.

edit2: добавление

 RewriteBase / 

ломает ссылки. Они, кажется, идут в domain.com/about/ и … / contact /, но я получаю 404 – я предполагаю, что правило, которое я использовал, как-то несовместимо с тем, как я делаю свою связь, а потому Я также включил index.php.

Вы определяете все свои ссылки в HTML относительно текущего пути.

Вам нужно будет изменить свои ссылки таким образом, чтобы:

 <a href="about/">about</a> | <a href="contact/">contact</a><br><br> 

становится (обратите внимание на листинг / на URL):

 <a href="/about/">about</a> | <a href="/contact/">contact</a><br><br> 

Когда вы находитесь на странице site.com/about/us например ссылку <a href="home/" разрешается браузером быть site.com/about/us/home .

Решение состоит в том, чтобы изменить все ваши ссылки, изображения, таблицы стилей и javascripts, чтобы использовать абсолютные пути в ваших URL-адресах, а не относительные, например, у вас есть.

EDIT: Просто заметили ваше редактирование. Вы действительно должны использовать абсолютные пути, а не относительные. Если вы хотите сохранить относительные URL-адреса, вам придется использовать что-то вроде <base href="/" /> на всех ваших страницах.

Независимо от того, что вы делаете, нажатие <a href="about/">about</a> будет добавлено в about/ в конец URL-адреса. Вот как работают относительные ссылки.

Ваш выбор в порядке разумности:

  1. Просто удалите эту конечную косую черту. В этом причина вашей проблемы:

     <a href="about">about</a> 

    Относительная ссылка заменит последний раздел пути (после последнего / ) новым значением.

  2. Добавьте предыдущий ../ . Это немного взломано, но это позволяет сохранить эту ценную косые черты

     <a href="../about/">about</a> 
  3. Сделайте 301 переадресацию из /about/about to /about . Это приведет к тому, что адресная строка изменится с /about на /about/about и обратно.

Может быть, слишком поздно ответить, но добавление этой строки в раздел <head> сделает трюк:

 <base href="/"> or <base href="your-domain-name">