Только вот модификатор U (PCRE_UNGREEDY) вовсе не для этого. Он просто инвертирует жадность квантификаторов.
Тут нужен u (PCRE_UTF8). http://php.net/manual/ru/reference.pcre.pattern.modifiers.php
~is меняем на ~uis
Первый вариант не меняет домен
http://site.ru/? => http://site.ru/
http://www.site.ru/? => http://www.site.ru/
Второй вариант всегда отправляет на домен с www
http://site.ru/? => http://www.site.ru/
Сбросить GET параметры при редиректе можно добавив знак вопроса
RewriteRule ^forum/ /? [L,R=301]
Если я правильно понял, то нужно вот так
RewriteCond %{THE_REQUEST} " /\?" RewriteRule ^ /? [R=301,L]
Или так
RewriteCond %{THE_REQUEST} " /\?" RewriteRule ^ http://www.site.ru/? [R=301,L]
Тогда даже не знаю, в чем может быть проблема.
Правило для ЧПУ, которое направляет запросы на /bitrix/urlrewrite.php
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
Порядок следования правил имеет значение.
Редиректы должны быть записаны раньше правила для ЧПУ.
По поводу ограничения в 150 строк. А если не запихивать весь список из сотни адресов в одно правило, а разделить его на несколько правил. По полсотни на каждый RewriteRule.
Чтобы правило работало только для адресов внутри одного раздела /pred/ нужно RewriteRule ^ заменить на RewriteRule ^pred/
Значит адреса имеют такой вид /pred/part1/part2/
В part1 разрешается gde-kupit-saiding, kupit-fasadnye-paneli, kupit-vodostoki, prochee.
В part2 разрешается centralnii-federalnii-okrug и какие-нибудь key2, key3, key4.
Если в part1 или part2 кроме разрешенного значения есть что-то лишнее, то сделать редирект на правильный адрес.
RewriteCond $1/$2 "(?x)(\ gde-kupit-saiding |\ kupit-fasadnye-paneli |\ kupit-vodostoki |\ prochee )\ [^/]* / .*? (\ centralnii-federalnii-okrug |\ key2 |\ key3 |\ key4 )" RewriteCond "%1/%2 $1/$2" !^(\S+)\s\1$ RewriteRule ^pred/([^/]+)/([^/]+)/$ /pred/%1/%2/ [R=301,L]
Директива RewriteMap не работает в файле htaccess. Она может использоваться только в контексте server config, <VirtualHost>.
Так что для её примененения нужен доступ к файлам конфигурации веб-сервера (httpd.conf)
Достаточно заменить квантификатор + на *
RewriteRule ^(?:каталог1|каталог2|каталог3)(/.*) $1 [R=301,L]
RewriteEngine On RewriteRule ^(?:каталог1|каталог2|каталог3)(/.+) $1 [R=301,L]
А если имя каталогов отличается только цифрами.
RewriteEngine On RewriteRule ^каталог[1-3](/.+) $1 [R=301,L]
RewriteEngine On RewriteRule ^каталог1(/.+) $1 [R=301,L] RewriteRule ^каталог2(/.+) $1 [R=301,L] RewriteRule ^каталог3(/.+) $1 [R=301,L]