Apache 删除特定的查询字符串

Apache Remove Specific Query Strings

我想从任何 URL 中删除特定的查询字符串,保留其他查询字符串,并考虑第一个与后续字符串(?与 &)。我只想删除以下 URL 参数:

活动 外部

重要的是要考虑到这些 URL 参数可能存在于 URL 中的任何位置,因此可能需要将其余参数翻转为“?”从 ”&”。

这里有几个例子:

Original: www.domain.com/page.html?campaign=123
Modified: www.domain.com/page.html

Orig: www.domain.com/page2.html?campaign=123&flow=shop
Mod: www.domain.com/page2.html?flow=shop

Orig: www.domain.com/page6.html?flow=account&campaign=123&entry=1&external=google
Mod: www.domain.com/page6.html?flow=shop&entry=1

您可以在 DOCUMENT_ROOT/.htaccess 文件中使用此代码:

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^(?:(.+?)&)?(?:external|campaign)=[^&]*$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(?:external|campaign)=[^&]*(?:&(.*))?$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1 [L,NE,NC,R=302]

RewriteCond %{QUERY_STRING} ^(?:(.+?)&)?(?:external|campaign)=[^&]*(&.*)?$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1%2 [L,NE,NC,R=302]