Apache2 和 rewritemap - 数小时的尝试

Apache2 和 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

旧网址如下:

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,因为使用前一行、前两行等。%n 仅指最后一个 RewriteCond 行,因此我不得不将所有内容放入一行,然后检查映射。但无论如何,谢谢你,你把我推向了正确的方向 :)

相关内容