0

メッセージ ボードでは、エンコードされた文字でリクエストが届くことがあり、リダイレクトが設定されていない場合、訪問者は 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 を実行しています。

4

1 に答える 1

0

一致した式は括弧で囲み(.*)、 に表示する必要があり$1ます。

ところで、これはデバイスに戻り、リダイレクトする前に再びエスケープする可能性があるため、本当にリダイレクトが必要ですか。パススルーなどをしたいかもしれませ[PT]ん。

于 2012-11-19T15:12:30.737 に答える