除了 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
file, before您现有的指令。
The RewriteCond
指令检查是否存在任何查询字符串。这QSD
flag 丢弃重定向响应中的查询字符串。
但是,如果您还有其他 URL 参数other需要保留的 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 参数混合在一起?
UPDATE:
最近我刚刚测试过...与你的第二个代码相同吗?有什么不同?
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 参数)中,您将获得两个重定向。两个重定向不一定太糟糕,但是,它可以减少为单个重定向(最坏的情况)。