301重定向" /?"和" /?i = xxx"到" /"

时间:2017-05-04 03:02:01

标签: .htaccess redirect

大家好我有重定向问题。我尝试做了

的301
www.example.com/? to www.example.com/

以及

www.example.com/?i=xxxx to www.example.com/

使用此代码:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^i=(.*)$
RewriteRule ^$ https://www.example.com/ [R=301,L]

或与此

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^i=(.*)$
RewriteRule ^$ / R=301,L]

但是当我重定向到新网站时,它会继续添加i=xxx

我想重定向

  • /?/
  • /?i=xx/

1 个答案:

答案 0 :(得分:1)

RewriteRule ^$ https://www.example.com/ [R=301,L]

您需要在? 替换的末尾添加RewriteRule(实际上是一个空查询字符串)。否则,如果您未指定查询字符串,则Apache会自动从请求中复制查询字符串。单个?不会出现在目标上 - 查询字符串将被完全删除。例如:

 RewriteEngine On
 RewriteCond %{QUERY_STRING} ^i=(.*)$
 RewriteRule ^$ https://www.example.com/? [R=301,L]

此处不需要RewriteBase指令,因为您没有使用相对替换。

注意:如果您使用WordPress,则应将(.*)更改为[0-9]+,否则可能会破坏某些内部功能,例如帖子预览。参考:https://xeedbeam.me/prevenir-contenido-duplicado-en-wordpress-con-htaccess-para-seo-parte-1/

或者 - 或者,在Apache 2.4+上,您可以改为使用QSD(查询字符串丢弃)标志。

 RewriteRule ^$ https://www.example.com/ [QSD,R=301,L]

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

<强>更新

  

我想将/?重定向到/

这有点棘手,因为您无法确定(仅使用QUERY_STRING变量)查询字符串是否完全不存在(即没有?)或只是空(使用{{ 1}}但之后没有任何内容)。但是,您可以检查包含实际请求标头的?服务器变量(例如“THE_REQUEST”)。例如:

GET /? HTTP/1.1

但是,这对搜索引擎来说不太可能是个问题。 <{1}}和RewriteEngine On RewriteCond %{THE_REQUEST} ^GET\s/\?\sHTTP RewriteRule ^$ /? [R=301,L] 应该同等对待。