web-dev-qa-db-ja.com

パーセントエンコードされた文字とクエリ文字列でURLをリダイレクトする方法は?

これらのURLがあります:

  1. http://www.example.com/example.html%20text-decoration:%20none%E2%80%9D%3Eexample.com%3C%20%3C/i%3E%3C/span%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Ctable%20bgcolor=
  2. http://www.example.com/examindex/?p=2343543

。htaccessファイルで301リダイレクトを使用してこれらのリンクをリダイレクトするにはどうすればよいですか? 301リンク1をhttp://www.example.com/example.htmlにリダイレクトしたい

redirect 301 /example.html%20text-decoration:%20none%E2%80%9D%3Eexample.com%3C%20%3C/i%3E%3C/span%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Ctable%20bgcolor= http://www.example.com/example.html

リンク2をhttp://www.example.com/examindex/にリダイレクトしたい。私はもう試した:

redirect 301 /examindex/?p=2343543 http://www.example.com/examindex/

しかし、それは機能していません。

1
Init

Redirect(mod_alias)は、%デコードされたパスと一致します。また、このディレクティブを使用してクエリ文字列を一致させることはできません。したがって、これらのリダイレクト(%デコードされたパスに対しても一致)の両方にmod_rewriteを使用するのが最善です。 mod_aliasとmod_rewriteの両方のディレクティブを混在させることは決して良い考えではありません。

.htaccessの上部で、書き換えエンジンを有効にします...

RewriteEngine On

「リンク1」の場合、マッシュアップリンク全体と一致する必要はなく、最初のビットと一致するだけであると想定します。 <space>text-decorationで十分だと思いますか? %デコードパスと照合するため、スペースは文字通りスペース()であり、%20ではありませんが、スペースは正規表現(\)でエスケープする必要があります。

RewriteRule ^example\.html\ text-decoration /examindex/ [R=301,L]

「リンク2」の場合、クエリ文字列と一致させるためにRewriteCondディレクティブを使用する必要があります。クエリ文字列は、パターンマッチングの前にURLパスから削除されます(これはmod_alias Redirectにも適用されます)。

RewriteCond %{QUERY_STRING} =p=2343543
RewriteRule ^examindex/$ /examindex/? [R=301,L]

クエリ文字列を削除するには、置換の末尾の?が必要です。 (または、Apache 2.4+では代わりにQSDフラグを使用できます)

3
MrWhite