【问题标题】:Remove query string and parameters删除查询字符串和参数
【发布时间】:2021-05-05 06:36:03
【问题描述】:

由于不值得在这里讨论的原因,Google 一直在索引我的一个网站,网址中包含不必要的查询字符串 wordfence_lhhidwordfence_logHuman。我想修改我的 .htaccess 文件以删除所有这些查询字符串。

我的网址

example.com/page/111/?wordfence_lh=1&hid=CA2BA660BEFF26B9A17F8F85D7391BD4

example.com/page/80/?wordfence_logHuman=1&hid=647700EBF43600E7BC54103256F1D71B

预期网址

example.com/page/111/

example.com/page/80/

我找到了一种删除单个参数的方法,但我仍然找不到正则表达式或其他东西来删除多个查询参数。 非常感谢任何帮助,非常感谢!

这是我的.htaccess 文件的一部分:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} on [OR]
RewriteCond %{SERVER_PORT} ^555$ [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule .* - [E=WPR_SSL:-https]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule .* - [E=WPR_ENC:_gzip]
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} =""
RewriteCond %{HTTP:Cookie} !(wordpress_logged_in_.+|wp-postpass_|wptouch_switch_toggle|comment_author_|comment_author_email_) [NC]
RewriteCond %{REQUEST_URI} !^(/(.+/)?feed/?.+/?|/(?:.+/)?embed/|/(index\.php/)?wp\-json(/.*|$)|/cantonicalt/)$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^(facebookexternalhit).* [NC]
RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" -f
RewriteRule .* "/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}%{ENV:WPR_WEBP}.html%{ENV:WPR_ENC}" [L]
</IfModule>

【问题讨论】:

  • 欢迎来到 SO,请在您的问题中分享您的 htaccess 文件,谢谢。
  • @RavinderSingh13 我刚刚更新了我当前的 htaccess 代码。
  • 更多信息:wordfence 插件是造成这种情况的原因。我卸载了它,但这些 URL 参数并没有消失!
  • 好的,所以您在浏览器中点击了网址example.com.com/page/111/,并且您希望它由example.com/page/111/?wordfence_lh=1&amp;hid=CA2BA660BEFF26B9A17F8F85D7391BD4 提供服务?
  • @RavinderSingh13 不,我只想删除我所有 URL 中的 ?wordfence_lh=1&amp;hid=CA2BA660BEFF26B9A17F8F85D7391BD4 部分。谷歌机器人抓取并索引它们使我重复的内容。换句话说,我想摆脱这些参数,它们是 wordfence_lh、hid 和 wordfence_logHuman。 URL 应该是example.com.com/page/111/

标签: wordpress .htaccess query-string url-parameters


【解决方案1】:

这是简单的 SEO。您需要在 robots.txt 中阻止 GET 请求 只需将其添加到 robots.txt

Disallow: /?

并且所有 GET url 都被阻止索引(noindex)。 Google 需要一些时间才能从搜索结果中删除垃圾页面。

您可以阻止任何垃圾页面,只需添加

Disallow: *?s=
Disallow: *&s=

【讨论】:

  • 正如谷歌在他们的指南中所说:“你不应该使用 robots.txt 作为在谷歌搜索结果中隐藏你的网页的一种手段。这是因为,如果其他页面指向你的页面并带有描述性文字,您的页面仍然可以在不访问该页面的情况下被编入索引。这就是我不想使用此方法的原因。
  • 是的,robots.txt 是 google bot 的推荐文件,但它适用于 90% 的情况。您还可以添加元标记&lt;meta name="robots" content="noindex, nofollow" /&gt; 以便为索引获得 100% 阻止页面
  • 由于这些网址已被 Google 编入索引,因此您不应使用 robots.txt 阻止访问 - 这不会很快从 Google 索引中删除这些网址。
  • @MrWhite 完全同意你的看法。这根本不是解决方案。
【解决方案2】:

除了 3 个 URL 参数 wordfence_lh、hid 和 wordfence_logHuman 之外,我没有看到任何其他参数。我想删除它们

如果您在任何其他 URL 上没有任何其他 URL 参数,那么如果存在任何查询字符串,最简单的方法就是删除整个查询字符串。例如:

# Remove any query string on all URLs
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [QSD,R=301,L]

这需要放在.htaccess 文件的顶部,你现有的指令之前。

RewriteCond 指令检查是否存在任何查询字符串。 QSD 标志从重定向响应中丢弃查询字符串。

但是,如果您在 other URL 上有其他 URL 参数,则需要保留这些参数,然后检查这些特定的 URL 参数(如最初建议的那样),然后删除整个查询字符串(如果有)存在 URL 参数。例如:

# Remove the entire query string if any one of the URL params are present
RewriteCond %{QUERY_STRING} (&|^)(wordfence_lh|hid|wordfence_logHuman)=
RewriteRule ^ %{REQUEST_URI} [QSD,R=301,L]

但我仍然不想干扰其他衡量工具,例如谷歌分析。

这不是问题,除非您在其他 URL 上使用 URL 参数,并且这些参数有时与您要删除的 URL 参数混合在一起?


更新:

最近我刚刚测试了...与您的第二个代码相同吗?有什么区别?

RewriteCond %{QUERY_STRING} ^(.*)&?wordfence_lh=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

RewriteCond %{QUERY_STRING} ^(.*)&?wordfence_logHuman=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

RewriteCond %{QUERY_STRING} ^(.*)&?hid=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

不,它不是“相同的”。保留与您要删除的 URL 参数混合的 URL 参数是“尝试”(如我上面最后一句中所述) - 这似乎不是您的要求。

但是,这些指令存在一些问题:

  1. 匹配太多,可能会损坏查询字符串。例如,它不仅匹配hid=,它还将匹配foohid=,然后将保留foo 部分,这可能会“破坏”查询字符串。例如。给定一个像foohid=123&amp;bar=1 这样的查询字符串,上面的指令会重定向到foobar=1,这显然是不正确的。

  2. 这一系列 3 条规则可能会触发 3 次外部重定向,因为每次出现您要删除的 URL 参数都会触发一个单独的重定向。这应该(并且可以)避免。在您的示例 URL(仅包含其中两个 URL 参数)中,您将获得两个重定向。两个重定向不一定太糟糕,但是,它可以减少为一个重定向(最坏的情况)。

【讨论】:

  • 谢谢,您的第二个选项似乎是我的答案。最近我刚刚测试过:RewriteCond %{QUERY_STRING} ^(.*)&amp;?wordfence_lh=[^&amp;]+&amp;?(.*)$ [NC] RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]RewriteCond %{QUERY_STRING} ^(.*)&amp;?wordfence_logHuman=[^&amp;]+&amp;?(.*)$ [NC] RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]RewriteCond %{QUERY_STRING} ^(.*)&amp;?hid=[^&amp;]+&amp;?(.*)$ [NC] RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]你的第二个代码是一样的吗?有什么区别?
  • 该代码不一样,并且可以说是不正确的。我已经用解释更新了我的答案。
  • 不客气。如果这回答了您的问题,那么请通过单击答案旁边的勾号/复选标记将其标记为“已接受”(以帮助其他读者并从未回答的问题队列中删除该问题)。获得 15 个代表后,您还可以对您认为有帮助的答案进行投票。谢谢,非常感谢。 :)
  • 是的,当我使用自己的代码时,我总是想知道它是否会生成太多触发的重定向。一般来说,你的代码更好,它解决了所有提到的问题,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2012-08-30
  • 2020-11-13
  • 1970-01-01
  • 2021-09-01
  • 2014-09-06
相关资源
最近更新 更多