.htaccess только переписать не перенаправить

Мне нужен htaccess, который сделает следующий URL:

domain.com/index.php?page=contact

Измените ссылку на:

domain.com/contact

так что если я делаю:

<a href="/contact">Contact</a>

Ссылка приведет меня к

domain.com/index.php?page=contact

Но ссылка, показанная в области ссылок в браузере, будет:

domain.com/contact

Может кто-нибудь, пожалуйста, помогите мне?

1 ответ

Решение

Это должно работать для вас, это должно быть помещено в вашу корневую папку, где ваш index.php файл находится внутри файла с именем .htaccess:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?page=$1 [L]

Что делает вышеприведенное правило?

Сначала мы проверяем, не существует ли файл с:

RewriteCond %{REQUEST_FILENAME} !-f

Затем мы проверяем, не существует ли папка с:

RewriteCond %{REQUEST_FILENAME} !-d

Затем мы проверяем, что URL, что мы ищем, в вашем случае domain.com/anything что мы делаем с:

^([^/]+)$

Выше будет собирать все, что после первого / после domain.com, например:

domain.com/contact
domain.com/about-us
domain.com/home

Правая большая часть нашего правила перед квадратными скобками, говорит, что перенаправить и куда:

index.php?page=$1

Это означает, что мы хотим перенаправить все, что мы собрали из предыдущего правила, представленного выше как $1 в index.php?page=$1 который с использованием нашего предыдущего примера будет означать:

domain.com/index.php?page=contact
domain.com/index.php?page=about-us
domain.com/index.php?page=home

[L] говорит, что мы хотим остановиться, L это флаг, который означает LASTотсутствие каких-либо флагов перенаправления и URL-адреса, не являющегося внешним или полным доменным именем, означает, что мы хотим выполнить внутреннее перенаправление.

RewriteBase / означает, что мы находимся в корневой папке вашего домена.

RewriteEngine On означает, что мы хотим активировать mod_rewrite который отвечает за переписывание перенаправлений.

-MultiViews является единственным актуальным Options в этом случае, поэтому я только объясню, что он заботится о том, чтобы, когда папка не существовала, она не искала замену для ее замены.

Другие вопросы по тегам