Назад | Перейти на главную страницу

Использование 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/ утверждает, что это работает)

Однако вроде ничего не работает. Никаких перенаправлений не происходит. Какие-нибудь явно очевидные заблуждения с моей стороны, а?

Я считаю, что это сработает:

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

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