我该如何重写:
http://www.example.com/?aff=number
收件人:http://www.example.com
我要删除上的所有实例aff=x
无论URL中有多少其他参数。我该如何重写:
http://www.example.com/?aff=number
收件人:http://www.example.com
我要删除上的所有实例aff=x
无论URL中有多少其他参数。我要删除上的所有实例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
(永久性)只有在您确认其正常工作后(如果这是永久性的)。
NE
(noescape
) 标记到RewriteRule
指令,以防止这些字符在替换中被双重编码。例如:RewriteRule (.*) /$1?%1%2 [NE,R=302,L]
TheQUERY_STRING
Apache未对服务器变量进行%解码。通常,mod\\u rewrite URL在将响应发送回客户端之前对替换进行编码。但这将对我们从查询字符串中捕获的任何已编码字符进行双重编码。这个NE
标志可防止发生这种情况。aff
其中包含一个“数字”。通常,在处理regex时应该尽可能具体,但是,如果要删除的URL参数可以包含任何内容,那么请将CondPattern修改为类似以下内容之一^(.*&|)aff=.*?(?:&(.*)|)$
- 0个或更多字符的非贪婪匹配^(.*&|)aff=[^&]*(?:&(.*)|)$
- 匹配除&
(URL参数分隔符)0次或更多次总而言之:
RewriteCond %{QUERY_STRING} ^(.*&|)aff=[^&]*(?:&(.*)|)$
RewriteRule (.*) /$1?%1%2 [NE,R=302,L]