将 URL 参数的一部分重定向到 URL 路径

将 URL 参数的一部分重定向到 URL 路径

我使用了一个创建如下链接的模块:

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]

这会尝试匹配一个backURL 参数,该参数的值仅由数字组成,但您的示例包含一个绝对 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(临时)重定向进行测试,以避免潜在的缓存问题。

相关内容