Сбросить GET параметры можно добавив знак вопроса
http://mysite.ru/%1-%2/$1?
Если там кроме доменов RU нет других COM ORG и тд.
RewriteCond %{HTTP_HOST} ^(?:www\.)?+(?!xn--)([^.]+)\.mysite\.ru$ RewriteRule (.*) http://mysite.ru/%1-ru/$1? [R=301,L]
Редирект для всех доменов кроме .рф и остальных в Punycode
RewriteCond %{HTTP_HOST} ^(?:www\.)?+(?!xn--)([^.]+)\.([^.]+)$ RewriteRule (.*) http://mysite.ru/%1-%2/$1 [R=301,L]
Пара вариантов
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} =fdx_switcher=mobile RewriteRule .* /$0? [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{THE_REQUEST} " (\S+)\?fdx_switcher=mobile " RewriteRule ^ %1? [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
Правила применяются последовательно и в том порядке, в котором записаны.
Первыми поставить правила для отдельных страниц и категорий, а после уже общее правило для всех остальных.
RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru RewriteRule ^cat/(.*)$ http://website.ru/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru RewriteRule ^(.*)$ http://website.ru/$1 [R=301,L]
Для переадресации
site.ru/cat/ -> website.ru
www.site.ru/cat/ -> website.ru
site.ru/cat/lol -> website.ru/lol
RewriteCond %{HTTP_HOST} ^(www\.)?site\.ru RewriteRule ^cat/(.*)$ http://website.ru/$1 [R=301,L]
Без проверки RewriteCond %{THE_REQUEST} будет бесконечный редирект на http://сайт.ru/страница
В контексте VirtualHost проход по списку правил происходит только один раз и флаг [L] полностью останавливает обработку.
В контексте .htaccess флаг [L] останавливает только текущую итерацию, после чего выполняется новый проход по списку правил.
Завершается обработка, когда после очередного прохода не было изменений адреса или был внешний редирект.
http://habrahabr.ru/company/sprinthost/blog/129560/
/?page2 => /page/2/
RewriteCond %{THE_REQUEST} " /\?page2 " RewriteRule ^ http://site.ru/page/2/? [R=301,L]
Или так
RewriteCond %{QUERY_STRING} =page2 RewriteRule ^$ http://site.ru/page/2/? [R=301,L]
А по поводу http://site.ru/category4/?do=cat&category=load/111/4, то там подвох в том, что пока директива Redirect модуля mod_alias делает свое дело, mod_rewrite уже сделал свое дело и дописал параметры do=cat&category=load/111/4
RewriteCond %{THE_REQUEST} " /\?page2 " RewriteRule ^ http://site.ru/page/2/? [R=301,L] RewriteRule ^load/111/([1-4]) http://site.ru/category$1/? [R=301,L] RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]
Как-то так :)
/ru/forum/comment/14102612
Думаю, будет достаточно замены RewriteRule ^$ на RewriteRule ^index\.php$
AddDefaultCharset UTF-8 RewriteEngine on RewriteCond %{HTTP_HOST} ^api\.site$ RewriteRule ^index\.php$ index-api.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Нужно добавить проверку наличия www в переменной %{HTTP_HOST} и поставить нужный домен вместо %{SERVER_NAME}.
RewriteCond %{HTTP_HOST} ^www [OR,NC] RewriteCond %{HTTP:X-Forwarded-Protocol} !=https RewriteRule .* https://site.ru%{REQUEST_URI} [R=301,L]