メッセージ ボードでは、エンコードされた文字でリクエストが届くことがあり、リダイレクトが設定されていない場合、訪問者は 404 応答を返します。
たとえば、トピック #309 のリクエストは、viewtopic.php?t=309 ではなく、viewtopic.php%3Ft%3D309 として受信されます。
そのため、次のようにリダイレクトを設定しました。
# Redirect from calls to incorrect topic constructs to the actual topic link
RewriteCond %{THE_REQUEST} viewtopic\.php%3Ft%3D([0-9]+)
RewriteRule .* http://www.example.com/viewtopic.php?t=%1 [R=301,L]
%{THE_REQUEST} を見るのは、エンコーディングを使用してリクエストを確認する唯一の方法だからです。次に、%3D (= 記号) の後の 1 つ以上の数字を置換として選択します。
何が起こっているかというと、私のログによると、書き換え条件が一致し、rewriterule が起動されますが、リダイレクトされます
http://www.example.com/viewtopic.php?t=
つまり、置換はトピック番号を埋めません。
この問題が発生する前は、(%1、%2 などを介して) rewritecond から置き換えることに何の問題もありませんでした。%{THE_REQUEST} からの置換について何か特別なことはありますか、それとも何か不足していますか?
Linux で Apache 2.2.22 を実行しています。