.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
в этом случае, поэтому я только объясню, что он заботится о том, чтобы, когда папка не существовала, она не искала замену для ее замены.