Apache2 と rewritemap - 何時間も試してみた

Apache2 と rewritemap - 何時間も試してみた

rewritemap の問題で行き詰まりました。

私がやりたいのは、何千もの古い、ほぼランダムな URL を新しい URL にリダイレクトすることです。マップは手動で作成しますが、このコードが機能する必要があります。

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.cat_4)(.*)
RewriteRule .* ${url_rewrite_map:$1|NOTFOUND}? [R=301,L]

地図を次のようにしたいと思います:

example.com/abcd/cat_4 http://example.com/345_exact_address_of_page

古い URL は次のようになります:

http://example.com/abcd/cat_4=0?Xi4B7WoN;;54

そして、次のように書き直してもらいたい。

http://example.com/345_exact_address_of_page

いろいろ試してみましたが、うまくいきません... 助けてもらえますか?

答え1

マップ内の検索キーとして $1 を使用していますが、そのパラメーターには RewriteRule でキャプチャした内容のみが保持されます。RewriteCond でキャプチャした文字列は %1、%2 などでキャプチャされます。

したがって、次のようなものを使用する必要があります。

RewriteCond %{HTTP_HOST}   (^example\.com)
RewriteCond %{REQUEST_URI} (/abcd/cat_4)
RewriteRule .* ${url_rewrite_map:%1%2|NOTFOUND} [R=301,L]

答え2

わかりました。うまくいきました。他の人のために、解決策を次に示します。

RewriteCond %{HTTP_HOST}%{REQUEST_URI}\?%{QUERY_STRING} (^example\.com.abcd.abcd=.*)
RewriteRule .* ${url_rewrite_map:%1|$1}? [R=301,L]

Krist van Besien の回答に返信します。%1%2%3 を 1 行前、2 行前などに使用することはできないと思います。%n は最後の RewriteCond 行のみを参照するため、すべてを 1 行にまとめてからマップのチェックを行う必要がありました。いずれにしても、ありがとうございます。良い方向に導いてくれました :)

関連情報