301 редиректы через .htaccess
# Самый простой вариант
Redirect 301 /test-1/ https://site.ru/test-2/
# 301 редирект с www на без www (главное зеркало – домен без www)
RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
# 301 редирект с без www на www (главное зеркало – домен с www)
RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
# 301 редирект со страниц со слешем на без слеша (весь сайт)
RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ https://site.ru/$1 [R=301,L]
# 301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически)
RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/wp-json/ RewriteRule ^(.*[^\/])$ https://site.ru/$1/ [R=301,L]
# Все страницы одного домена на главную страницу другого домена
RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ https://site.ru/ [L,R=301]
# Каждая страница одного домена на такой же адрес другого url
RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ https://site.ru/$1 [L,R=301]
# Каждая страница одного домена на такой же адрес другого url, кроме robots.txt
RewriteCond %{REQUEST_URI} !^/robots.txt$ RewriteRule ^(.*)$ https://site.ru/$1 [L,R=301]
# Редирект с протокола http на https.
RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Если возникает циклический редирект, то воспользуйтесь этим вариантом:
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Для Битрикс-сайтов на хостинге reg.ru
RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Для сертификатов https c Cloudflare:
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' # Without Cloudflare: # RewriteCond %{HTTPS} off RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,R=301,L]
# Убираем знак вопроса в конце URL (/?)
RewriteCond %{THE_REQUEST} ^[^\s]+\s+[^?]*?\? RewriteCond %{QUERY_STRING} ^$ RewriteRule .? https://site.ru%{REQUEST_URI}? [R=301,L]
# Удаление повторяющихся слешей ////
RewriteCond %{THE_REQUEST} // RewriteRule .* https://site.ru/$0 [R=301,L]
Источники:
https://web-optimizator.com/301-redirekt-htaccess/
https://libramedia.ru/blog/redirekt-so-znaka-voprosa-v-konce-url/
https://snipp.ru/htaccess/redirects-htaccess