如何解决没有网址变量的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,以避免潜在的缓存问题。
在测试之前,您需要清除浏览器缓存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。