mod_rewrite を使用して単一ページをリダイレクトする

mod_rewrite を使用して単一ページをリダイレクトする

最初の要件は、からのトラフィックをにリダイレクトすることですhttp://www.old-domain.orghttps://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>

ルールは 2 つあり、最初のルールには 2 つの条件があります。最初のルールの 2 番目の条件では、!演算子を使用して の一致を否定しますact=news&id=12345。最初のルールの条件間には暗黙の「AND」があるため、両方とも true である必要があります。

2 番目のルールは、/条件なしでページのみに一致します。

関連情報