RewriteCond %{THE_REQUEST} " /stat\.php\?id=77 "RewriteRule ^ /tovar/? [R=301,L]
Эти правила делают как раз наоборот редирект на http.
Покажите как у вас сейчас выглядит правило для редиректа с http на https.
К нему нужно добавить одну строку
RewriteCond %{HTTP_HOST} ^www\.senato-r\.ru$ [NC,OR]
RewriteCond &%{QUERY_STRING} ^(?:&catid=(\d+)|&sobi2Id=(\d+)|&sobi2Task=sobi2Details()|&[^&]+)++\3RewriteCond "%1 %2 \1=-cat-name-1 \2=-cat-name-2 \" "^(\d+) (\d+) .*?\1=(\S+)"RewriteRule ^ http://new.site.ru/index.php/cat/%1%3/%2? [R=301,L]
RewriteCond %{THE_REQUEST} "^\S+ (/.*?\?)" RewriteRule ^ %1 [R=301,L]
Сразу после RewriteEngine On добавить
RewriteRule ^([^&]+)&(.*) /$1?$2 [R=301,L]
(?! ) - негативная опережающая проверка.
Строка в $request_uri начинается с /.
Нужно (?!/personal/) или /(?!personal/)
"^(/(?!personal).*)index\.(?:php|html)"
В исходном правиле для index.php было дополнительное условие RewriteCond %{QUERY_STRING} ^\z
Т.е. index.html удалялся всегда, а index.php только когда в адресе нет GET параметров.
Можно после php добавить $.
"^(.*)index\.(?:php$|html)"
RewriteCond %{THE_REQUEST} /(.*)index.php.*$ RewriteCond %{QUERY_STRING} ^\z RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L] RewriteCond %{THE_REQUEST} /(.*)index.html.*$ RewriteRule .* /%1 [R=301,L]
Эти правила отрезают index.html и index.php
Эквивалент
if ($request_uri ~ "^(.*)index\.(?:php|html)") { return 301 $1; }
Можно же и без if
rewrite (/catalog/Joy/joy_em)_6_1t/ $1_1x1t/ permanent; rewrite ^(.*)index\.(?:php|html) $1 permanent;
Второе правило может вызвать зацикливание так что лучше проверять $request_uri.
RewriteRule ^razdel/([^/.]+)$ /stati/$1.html [R=301,L]
RewriteCond %{THE_REQUEST} "^\S+ /\?" RewriteRule ^ /? [R=301,L]
Или так
RewriteCond %{QUERY_STRING} . RewriteRule ^$ /? [R=301,L]