我使用了一个创建如下链接的模块:
https://example.com/login?create_account=1&back=https://example.com/product/2164/?ets_rv_add_review=1
我需要将它们重定向到:
https://example.com/product/2164/
此类链接有数百个。
我尝试了这个但是没有用:
RewriteCond %{QUERY_STRING} ^create_account=([0-9]+)&back=([0-9]+)$
RewriteRule /login https://example.com/product/%1/? [L,R=301]
答案1
RewriteCond %{QUERY_STRING} ^create_account=([0-9]+)&back=([0-9]+)$ RewriteRule /login https://example.com/product/%1/? [L,R=301]
这会尝试匹配一个back
URL 参数,该参数的值仅由数字组成,但您的示例包含一个绝对 URL(数字只出现在最后一个路径段中)。您的示例中还有更多 URL 参数。/login
在上下文中也会匹配失败,.htaccess
因为RewriteRule
图案不以斜线开头。
请尝试执行以下操作,靠近根文件的顶部.htaccess
(顺序很重要):
RewriteCond %{QUERY_STRING} ^create_account=\d+&back=https://[^/]+/([^?]+)
RewriteRule ^login$ https://example.com/%1 [QSD,R=301,L]
我在捕获的反向引用 ( ) 中包含了product
请求 URL 中的%1
。这将捕获查询字符串之前的所有内容。
并且始终先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。