没有网址变量的httaccess 301重定向

问题描述

我在进行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字符串?

解决方法

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

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

请尝试以下操作:

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

QSD(查询字符串丢弃)标志(Apache 2.4+)从重定向响应中删除查询字符串。否则,默认操作是从请求中追加查询字符串。如果您使用的是Apache 2.2,则需要在{em> substitution 字符串的末尾附加一个?(本质上是附加一个空的查询字符串)。

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

请先使用302(临时)重定向进行测试,然后再确定为301(如果打算这样做),然后再更改为301,以避免潜在的缓存问题。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...