@stragunov

Как преобразовать ссылки из GET в ЧПУ?

Здравствуйте. Имеется простое ЧПУ через .htaccess.
Да, знаю, что ЧПУ нужно делать через PHP, т.е. в .htaccess делать редирект на файл вхождения (index.php) и там разбирать url (что-то вроде этого). Но пока сделано так.

Собственно код ниже:
<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
</IfModule>

ЧПУ работает, но незадача в том, что ссылка, допустим контакты, доступна и по ЧПУ (/contacts) и через обычный GET (/?page=contacts).

Вопрос: Как сделать редирект с GET'а на ЧПУ, если пользователь зашёл через GET ? Т.е. заходим на site.ru/?page=contacts, и нас перебрасывает на site.ru/contacts

Пробовал так, но не работает:
RewriteCond %{QUERY_STRING} ^/index.php?page=(.*)$
RewriteRule ^/index.php?page=(.*)$ /$1 [L,R=301]

Спасибо за уделённое время!
  • Вопрос задан
  • 1170 просмотров
Пригласить эксперта
Ответы на вопрос 1
Defman21
@Defman21
Точка - специальный знак.
Вопросительный знак - специальный знак.
В регулярках их надо экранизировать.
Под твое выражение подходит строка типа /indexfphpage=123 или /indexsphppage=123 (т.е. после index идет 1 любой знак за исключением переноса строки (\n), в php последняя p - не обязательная (из-за ?))
Правильная регулярка - ^/index\.php\?page=(.*)$
Но я не понимаю смысла такого редиректа =\
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы