Apache2 和 rewritemap - 數小時的嘗試

Apache2 和 rewritemap - 數小時的嘗試

我遇到了重寫映射問題。

我想做的是將數千個幾乎隨機的舊網址重新導向到新網址。我將手動建立地圖,但我需要此程式碼才能運作。

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 作為使用前一行、前兩行等。 。但無論如何謝謝你,你把我推向了好的方向:)

相關內容