Первым требованием было перенаправить трафик с 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/утверждает, что это работает)
Однако, похоже, ничего не работает. Никаких перенаправлений не происходит. Какие-то явно очевидные заблуждения с моей стороны, а?
решение1
Я верю, что это сработает:
<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
. Между условиями первого правила есть неявное "И", поэтому они оба должны быть истинными.
Второе правило соответствует /
только странице, без каких-либо условий.