1

我在进行 301 重定向时遇到问题。

我的旧网址是

https://example.com/es/component/users/registration?item=21

新的是

https://example.com/es/login/registro

所以,我写了这个.htaccess

RewriteRule ^es\/component\/users\/registration\/?item=21$  "https://mywebsite.com/es/login/registro" [R=301,L]

但它重定向到https://mywebsite.com/es/login/registro?item=21

我怎样才能摆脱这个?item=21字符串呢?

4

1 回答 1

0

您发布的指令实际上不会按照说明执行重定向,除非请求中的?URL 编码(as %3F)并且没有实际的查询字符串?或者您看到来自较早(错误)尝试的缓存响应?(301 重定向将被浏览器永久缓存。)

RewriteRule 模式仅与 URL 路径匹配,而不是查询字符串。要匹配查询字符串,您需要一个附加RewriteCond指令并检查QUERY_STRING服务器变量。

请尝试以下操作:

RewriteCond %{QUERY_STRING} ^item=21$
RewriteRule ^es/component/users/registration$ /es/login/registro [QSD,R=302,L]

( QSDQuery String Discard) 标志 (Apache 2.4+) 从重定向响应中删除查询字符串。否则,默认操作是从请求中附加查询字符串。如果您使用的是 Apache 2.2,那么您需要将 a 附加?替换字符串的末尾(本质上附加一个空查询字符串)。

无需反斜杠转义RewriteRule 模式中的斜杠。

当您确定它工作正常以避免潜在的缓存问题时,首先使用 302(临时)重定向进行测试,然后再更改为 301(如果这是意图)。

您需要在测试前清除浏览器缓存。

于 2020-09-20T00:11:16.523 回答