Как сделать перенаправление get запроса страницы на главную кроме некоторых страниц?

Есть такая структура:
- Главная (index.php)
- Страница входа (signin.php)
- Страница регистрации (signup.php)
- Страница пользователя (user.php)
- Админка пользователя (admin.php)

Работает это так:
Пользователь заходит на главную, авторизуется и создается сессия (если есть сессия то редиректит на admin.php)
Для каждого пользователя страница user.php принимает get параметр login. Таким образом если обратиться по адресу сайт.ру/user.php?login=user1 - мы увидим данные user1 из БД.

Хочется преобразовать сложную структуру сайт.ру/user.php?login=user1 в сайт.ру/user1

В файл .htaccess пишу следующее:

RewriteEngine on
RewriteRule ^(.*)$ user.php?login=$1 [L]

Но при таком варианте заходя по адресу сайт.ру/user1 получаю ошибку.

Если пишу:

RewriteEngine on
RewriteRule ^m/(.*)$ user.php?login=$1 [L]

и обращаюсь по адресу сайт.ру/m/user1 все работает как нужно.

Вопрос - как перенаправить все запросы сайт.ру/user.php?login=user1 на главную, но при этом исключить страницы регистрации, входа и админки? Т.к. если человек обратиться по адресу сайт.ру/signin.php = я так понимаю это воспримется как сайт.ру/user.php?login=signin.php

Вообще не как не могу разобраться с этим. Может кто то поможет?
И если можно сразу с вариантом исключения расширения .php в адресной строке (что бы .php не показывалось)
  • Вопрос задан
  • 979 просмотров
Пригласить эксперта
Ответы на вопрос 2
shambler81
@shambler81 Куратор тега htaccess
ГЕТ не является частью урла и не ходит в реврайт рул.
Для его выделения мы используем двухуровневую конструкцию
Так же все что $1 из конда это будет %1

# 301 --- www.test.com/faq.html?faq=13&layout=bob => www.test2.com/faqs.html
RewriteCond %{HTTP_HOST} ^www\.test\.com$
Если хост такой-то
RewriteCond %{QUERY_STRING} (^|&)faq\=13($|&)
И если есть гет запрос такой то
RewriteCond %{QUERY_STRING} (^|&)layout\=bob($|&)
И НЕТ такого-то запроса Исключение это !
RewriteCond %{QUERY_STRING} !(^|&)layout\=bob2($|&)
ТО выполнить такое правило
RewriteRule ^faq\.html$ http://www.test2.com/faqs.html? [L,R=301]

Такая конструкция не обязательна(^|&)faq\=13($|&)
Можно сократить до faq\=13 но сама же конституция выбирала вариант с апмерсантом и без него.
Так же обрати вниание на конец самого рула та в конце стоит ? он в таком написание удалит гет параметры вовсе
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы