我要删除上的所有实例aff=x
无论URL中有多少其他参数。
假设您想保留任何其他URL参数(按任何顺序),只需删除aff=number
参数,然后可以在根目录中使用mod\\u rewrite执行以下操作.htaccess
文件:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=\\d+(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
这需要在现有WordPress指令之前执行。
这假设如果aff
参数存在时,其值仅为数字,且至少为1位。
这个$1
是对捕获的RewriteRule
图案。因此,这将处理任何URL路径,而不仅仅是文档根,如您的示例所示。
%1
和%2
是前一个CondPattern中捕获的组的反向引用。%1
是否在要删除的参数之前%2
在之后。两者都是可选的。
更改302
(临时)重定向到301
(永久性)只有在您确认其正常工作后(如果这是永久性的)。
UPDATE#1: 查询字符串包含%-编码字符
如果任何其他URL参数(要保留)包含URL编码的(%-编码)值,则需要添加
NE
(
noescape
) 标记到
RewriteRule
指令,以防止这些字符在替换中被双重编码。例如:
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]
The
QUERY_STRING
Apache未对服务器变量进行%解码。通常,mod\\u rewrite URL在将响应发送回客户端之前对替换进行编码。但这将对我们从查询字符串中捕获的任何已编码字符进行双重编码。这个
NE
标志可防止发生这种情况。
UPDATE#2: 要删除的URL参数值可以是任何内容。这个问题专门涉及删除URL参数aff
其中包含一个“数字”。通常,在处理regex时应该尽可能具体,但是,如果要删除的URL参数可以包含任何内容,那么请将CondPattern修改为类似以下内容之一
^(.*&|)aff=.*?(?:&(.*)|)$
- 0个或更多字符的非贪婪匹配^(.*&|)aff=[^&]*(?:&(.*)|)$
- 匹配除&
(URL参数分隔符)0次或更多次
这两个正则表达式中的重要一点是,匹配的值不能被捕获,即不能用普通括号括起来。
总而言之:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=[^&]*(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]