
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 は次のようになります:
そして、次のように書き直してもらいたい。
いろいろ試してみましたが、うまくいきません... 助けてもらえますか?
答え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 行にまとめてからマップのチェックを行う必要がありました。いずれにしても、ありがとうございます。良い方向に導いてくれました :)