RewriteCond %{HTTP_HOST} ^city\.site\.ru [NC]RewriteRule ^(production/fasonnyj-prokat/shveller)/gnutyj/$ https://%0/$1/ [R=301,L]
В логах вылезли страницы с 404 ошибкой такого вида:
https: //site.ru/statiay/smarta_sumka/*
Подскажите, как сделать 301 редирект (.htaccess) чтобы страницы с 404 ошибкой перенаправлялись на оригинальные страницы без * :
https: //site.ru/statiay/smarta_sumka/
RewriteRule ^(.+)/\*$ /$1/ [R=301,L]
if ($request_uri ~ "^/scripts/informer\.php\?chislo=5&imagenm=1&color=1$") { return 301 /informer?chislo=5&imagenm=1&color=1; }
if ($args ~ "^chislo=5&imagenm=1&color=1$") { rewrite ^/scripts/informer\.php$ /informer permanent; }
RewriteCond %{THE_REQUEST} " /show_news\.php\?who=\d+" RewriteRule ^ https://tot.site/en/show_news.php [R=301,L]
Или
RewriteCond %{QUERY_STRING} (?:^|&)who=\d+(?:$|&) RewriteRule ^show_news\.php$ https://tot.site/en/show_news.php [R=301,L]
Или использовать $request_uri там первоначальный запрос целиком с аргументами.
if ($request_uri ~ "/index.php\?.*topx-id=(\d+)") { return 301 /templates/firm/diplom/default?topx-id=$1;}
domain.ru/path?query
rewrite как и location работает только с /path.
Переменные $1..$9 будут перезаписаны ещё на этапе проверки шаблона rewrite ^/index\.php$
и пропадёт всё что ранее было сохранено с помощью if ($args ~* "topx-id=(\d+)") {
Нужно именованное выделение в регулярном выражении (?<name>pattern)
Ну и если нужно перенаправление с кодом 301, то добавить флаг permanent.
Если в строке замены указаны новые аргументы запроса, то предыдущие аргументы запроса добавляются после них.
Если такое поведение нежелательно, можно отказаться от этого добавления, указав в конце строки замены знак вопроса.
if ($args ~* "topx-id=(?<topx_id>\d+)") { rewrite ^/index\.php$ /templates/firm/diplom/default?topx-id=$topx_id? permanent;}
Как на самом деле работает mod_rewrite.
Строка с которой работает RewriteRule содержит только index.php, а do=addnews&id=238 попадает в %{QUERY_STRING}.
# /index.php?do=addnews&id=238 -> /index.php?tpl=obyavleniya&do=addnews&id=238RewriteCond %{QUERY_STRING} ^do=addnews&id=\d+$RewriteRule ^index\.php$ /index.php?tpl=obyavleniya [R=301,L,QSA]# /index.php?do=addnews&id=238 -> /index.php?do=addnews&tpl=obyavleniya&id=238RewriteCond %{QUERY_STRING} ^(do=addnews)&(id=\d+)$RewriteRule ^index\.php$ /index.php?%1&tpl=obyavleniya&%2 [R=301,L]
$text = preg_replace_callback( '/<a\s+href="\K[^"]+/i', function ($m) { return str_replace(['(', ')'], ['1', '2'], $m[0]); }, $text);
Если www.site1.ru -> www.site2.ru
RewriteEngine On RewriteCond %{HTTP_HOST} ^(|.+\.)site1\.ru [NC] RewriteRule ^(.*)$ http://%1site2.ru/$1 [L,R=301]
Если www.site1.ru -> site2.ru
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.site1\.ru [NC] RewriteRule ^(.*)$ http://site2.ru/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^(|.+\.)site1\.ru [NC] RewriteRule ^(.*)$ http://%1site2.ru/$1 [L,R=301]