删除查询字符串和参数 [英] Remove query string and parameters
问题描述
出于一些不值得在此详述的原因,Google一直在使用URL中不必要的查询字符串wordfence_lh
、hid
和wordfence_logHuman
来索引我的一个站点。我想修改我的.htaccess
文件以删除所有这些查询字符串。
我的URL
example.com/page/111/?wordfence_lh=1&hid=CA2BA660BEFF26B9A17F8F85D7391BD4
example.com/page/80/?wordfence_logHuman=1&hid=647700EBF43600E7BC54103256F1D71B
预期的URL
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>
推荐答案
我只看到3个URL参数WORDFARK_LH、HID和WORDFARK_logHuman。我想删除它们
如果您在任何其他URL上没有任何其他URL参数,那么最简单的方法是在存在任何查询字符串的情况下删除整个查询字符串。例如:
# Remove any query string on all URLs
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [QSD,R=301,L]
这需要放在.htaccess
文件的顶部,在您的现有指令之前。
RewriteCond
指令检查是否存在任何查询字符串。QSD
标志从重定向响应中丢弃查询字符串。
但是,如果您在其他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参数(如我在上面最后一句中提到的)-这似乎不是对您的要求。
但是,这些指令有几个问题:
匹配过多,可能会损坏查询字符串。例如,它不仅匹配
hid=
,还将匹配foohid=
,然后将保留foo
部分,这可能会中断查询字符串。例如。给出一个类似foohid=123&bar=1
的查询字符串,上述指令将重定向到foobar=1
,这显然是不正确的。这一系列的3条规则可能会触发3个外部重定向,因为要删除的URL参数每次出现时都会触发单独的重定向。这应该(也可以)避免。在您的示例URL(仅包含这些URL参数中的两个)中,您将获得两个重定向。两个重定向不一定太糟糕,但是可以减少到一个重定向(最坏情况)。
这篇关于删除查询字符串和参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!