Первым требованием было перенаправить трафик с http://www.old-domain.org
к https://example.press
- но только для корня домена; любая конкретная страница должна быть доступна на старом домене.
Итак, я немного изучил, и это сработало:
RedirectMatch "^/$" "https://example.press"
(что интересно, https://htaccess.madewithlove.be/ утверждал, что это не работает ...)
Затем пришел следующий запрос: также перенаправить другой URL-адрес в форме:
http://www.old-domain.example/site/index.php?act=news
, но таким образом, чтобы при запросе какой-либо конкретной новости не перенаправлялось (например, http://www.old-domain.org/site/index.php?act=news&id=12345
)
Это оказалось очень сложно. Во многих документах и статьях упоминалось, что это невозможно с Redirect
/RedirectMatch
директивы, но возможно с RewriteCond
+ RewriteRule
, который, как я понял, должен выглядеть примерно так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} act=news
RewriteRule ^(.*)$ https://example.press [R=302,L]
</IfModule>
(очередной раз, https://htaccess.madewithlove.be/ утверждает, что это работает)
Однако вроде ничего не работает. Никаких перенаправлений не происходит. Какие-нибудь явно очевидные заблуждения с моей стороны, а?
Я считаю, что это сработает:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} act=news
RewriteCond %{QUERY_STRING} !act=news&id=12345
RewriteRule ^(.*)$ https://example.press/ [R=302,L]
RewriteRule ^/$ https://example.press/ [R=302,L]
</IfModule>
Есть два правила, и первое правило имеет два условия. Второе условие первого правила использует !
оператор, чтобы отрицать совпадение на act=news&id=12345
. Между условными операторами первого правила есть неявное «И», поэтому оба они должны быть истинными.
Второе правило тогда соответствует /
только страница, без условий.