Использование mod_rewrite для перенаправления отдельных страниц

Использование mod_rewrite для перенаправления отдельных страниц

Первым требованием было перенаправить трафик с 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. Между условиями первого правила есть неявное "И", поэтому они оба должны быть истинными.

Второе правило соответствует /только странице, без каких-либо условий.

Связанный контент