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

Первым требованием было перенаправить трафик с http://www.old-domain.org на https: // example. нажмите - но только для корня домена; любая конкретная страница должна быть доступна в старом домене.

Итак, я немного изучил, и это сработало:

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/ утверждает, что это работает)

Однако, похоже, ничего не работает. Никаких перенаправлений не происходит. Во многих документах и ​​статьях упоминалось, что это невозможно с директивами 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/ утверждает, что это работает)

Однако, похоже, ничего не работает. Никаких перенаправлений не происходит. Во многих документах и ​​статьях упоминалось, что это невозможно с директивами 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/ утверждает, что это работает)

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

0
задан 5 September 2018 в 03:16
1 ответ

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

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]

Есть два правила, и первое правило имеет два условия. Второе условие для первого правила использует оператор ! для отмены совпадения act = news & id = 12345 . Между условными операторами первого правила существует неявное «И», поэтому они оба должны быть истинными.

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

1
ответ дан 4 December 2019 в 15:51

Теги

Похожие вопросы