我陷入了重写映射问题。
我想要做的是将数千个几乎随机的旧 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
旧网址如下:
我希望他们改写成:
我尝试了很多方法,但都无法让它发挥作用...你能帮助我吗?
答案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,因为使用前一行、前两行等。%n 仅指最后一个 RewriteCond 行,因此我不得不将所有内容放入一行,然后检查映射。但无论如何,谢谢你,你把我推向了正确的方向 :)