1

私はこのようないくつかのURLを持っています:

http://site.com/knowndir/../somedir/page.html

それらをにリダイレクトする必要があります

http://site.com/somedir/page.html

knowndir/../基本的に、URLからパーティクルを削除する必要があります。私はそのknowndir部分を知っています。

これまでのところ、私はこのルールを試しました:

RewriteRule knowndir\/\.\.\/(.*)$ http://site.com/$1 [R=301,L]しかし運がなかった。

私は何が間違っているのですか?

4

1 に答える 1

1

クライアントはすでにandpath要素.を削除しているようです。Firefoxまたはwgetを使用してページをリクエストする場合と、telnetおよびを使用してURLをリクエストする場合..の違いは、Apacheで確認できます。access.logGET /knowndir/../somedir/page.html HTTP/1.0

それにもかかわらず、Apacheがパス要素を含む要求を受信すると、Apacheは.リダイレクト..ルールを必要とせずに、それ自体ですでにそれを処理します。これは、明確なパスを取得するために、.またはを削除してこれらのセグメントを解決することを意味します。subdir/..

したがって、最終的にRewriteRuleは認識せず、リダイレクトknowndir/../を送信しません。301

更新

私はついに関連するRFC3986-UniformResource Identifier(URI):GenericSyntaxを見つけました。これは5.2.4で説明されています。ドットセグメントの処理方法...処理方法を削除します。

OT:301有効にしてテストしないでください。詳細については、この回答を参照してください。.htaccess書き換えルールをデバッグするためのヒント。

于 2013-02-15T16:56:03.043 に答える