Задать вопрос
@qnak
Студент, начинающий программист

Как сделать редирект на корень сайта Apache?

Возникла проблема с перенаправлением со страницы вида localhost/CMS на localhost
Вот такой код:
Redirectmatch 301 ^(.*)CMS/?$ $1
Работает, но только если нет знака "?"
localhost/CMS/?result=post&s=post переносит на localhost/?result=post&s=post , а правило не должно срабатывать.

Пробовал через Rewrite:
(весь код htaccess)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /CMS/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !CMS/?$ #надеюсь, исключил из следующего правила
RewriteRule .* /CMS/index.php [L]
</IfModule>

Redirectmatch 301 ^(.*)blog/*$ $1blog/home
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule .*CMS/?$ /  [R=301,L]
</IfModule>

Работает только виртуально https://htaccess.madewithlove.be?share=834e5846-da...
Где у меня не правильная логика?
  • Вопрос задан
  • 306 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@dodo512
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{THE_REQUEST} "^GET /CMS/ "
RewriteRule ^ / [R=301,L]
</IfModule>


<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /CMS/index.php [L]
</IfModule>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
Гет параметр не является частью урла и по этому RewriteRule его не видет вообще
для его выделения используют RewriteCond
В вашем же случае вам нужно его просто удалить
Сделать это легко
Redirectmatch 301 ^(.+)CMS/?$ /$1?
где вопрос в конце удалит гет параметр

ну или вот так
RewriteRule ^cms/aaaa$ /? [L,R=301,NC]
саму регулярку уже подкрутите поскольку в вас в задаче явно не все написано.
Так же не забывайте про регистрозависимость линукс и добавьте flag NC
Ответ написан
Ваш ответ на вопрос

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

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