Сборник редиректов для htaccess и php.
Redirect на PHP
if($_SERVER[HTTP_HOST] !== 'site.com'){
header('Location: https://site.com'.$_SERVER[REQUEST_URI],true, 301);
exit;
}
Данный кусок ставится в начале скрипта, как правило в index.php
Идет проверка, если хост не равен site.com то перекид на хост site.com и выход.
Редирект с http на https
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://my-site.com/$1 [R=301,L]
Редирект с .html на страницу без .html на конце урла
RewriteEngine On
RewriteCond %{HTTP_HOST} ^my-site.com$ [NC]
RewriteRule ^([^.]+).html$ $1/ [R=301,L]
Убираем /index.php
редирект с site.ru/index.php на site.ru
Запись в .htaccess
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
для битрикса
лично проверял, в моем случае работало нормально, убирает index.php не только с главной но и с внутренних страниц
RewriteCond %{THE_REQUEST} /(.*)index.php.*$
RewriteCond %{THE_REQUEST} !bitrix/admin/
RewriteRule .* /%1 [R=301,L]
Убираем .php на конце урла
Запись в .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>
В результате урл /oslozhneniya-posle-operatsii.php преобразуется к виду /oslozhneniya-posle-operatsii
Редирект с www на версию без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
На Modx (MODX Revolution 2.7.1-pl), данный редирект уже есть в файле .htaccess но только закомментирован
# Rewrite www.example.com -> example.com -- used with SEO Strict URLs plugin
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Убираем повторяющиеся слеши в конце урла
RewriteCond %{THE_REQUEST} //
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteCond %{QUERY_STRING} !http(s|)://
# Убедимся что это не урл в GET
RewriteRule .* /$0 [R=301,L]
# Исключаем все лишние слеши.
преобразование урла
до: /my-site.org/9maya-pilotki-optom///
после: /my-site.org/9maya-pilotki-optom/
Для битрикса, да и скорей всего для других cms, данное условие надо ставить перед следующей конструкцией, иначе редирект для слешей сработает не верно
[code]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
[/code] 
