jkm

Рейтинг
120
Регистрация
20.02.2014
RewriteCond %{HTTP_HOST} ^city\.site\.ru [NC]
RewriteRule ^(production/fasonnyj-prokat/shveller)/gnutyj/$  https://%0/$1/ [R=301,L]

kapec-master #:

В логах вылезли страницы  с 404 ошибкой такого вида:

https: //site.ru/statiay/smarta_sumka/*

https: //site.ru/statiay/ruchka_dilun/*


Подскажите, как сделать  301 редирект  (.htaccess) чтобы страницы  с 404 ошибкой перенаправлялись на оригинальные страницы без * :

https: //site.ru/statiay/smarta_sumka/

https: //site.ru/statiay/ruchka_dilun/


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=238
RewriteCond %{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=238
RewriteCond %{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]
Всего: 749