jkm

Рейтинг
120
Регистрация
20.02.2014
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]
<div\s+id="comments".+?</div>\s+</div>

Если анкоров произвольное количество. Проверялось на Notepad++ 7.9.3

(?-s)(.*?>)\(?(.*?)\||\)</a>\R?
$1$2</a>\n$1
Нужно будет несколько  раз нажать кнопку "Заменить все" пока не останется символов |.
Всего: 746