重写URL以删除查询字符串变量

时间:2016-08-04 19:18:01

标签: php regex

我有一个查询字符串搜索引擎仍然包含几个get变量。查询字符串的旧版本曾经有更多变量。

我没有返回我的网站当前包含这些旧变量的404,我试图重写URL以删除变量及其可能(或可能不)完全按任何顺序排列的任何值可能会出现。 所以我想要

http://example.com/page?var1=123&var2=abc&var3=xyz
http://example.com/page?var2=890&var1=123&var3=xyz
http://example.com/page?var1=123&var3=xyz&var2=
http://example.com/page?var1=123&var3=xyz&var2=q

成为

http://example.com/page?var1=123&var3=xyz

这将在已经重定向传入流量的应用程序页面上进行。

注意:我无法访问被调用的页面,也无法访问.htaccess。

2 个答案:

答案 0 :(得分:0)

您可以使用此单一规则从查询字符串中的任意位置删除var2=查询参数:

RewriteEngine On

RewriteCond %{THE_REQUEST} \?(.*&)?var2=[^&]*&?(\S*)\sHTTP [NC]
RewriteRule ^page/?$ %{REQUEST_URI}?%1%2 [R=302,NE,L]

答案 1 :(得分:0)

使用preg_replace函数的解决方案:

$url1 = "http://example.com/page?var1=123&var3=xyz&var2=";
$url2 = "http://example.com/page?var1=123&var2=abc&var3=xyz";

function removeParam($url, $param){
    $url = preg_replace("/&?var2=[^&]*/", "", $url);

    return $url;    
}

print_r(removeParam($url1, "var2"));  // http://example.com/page?var1=123&var3=xyz
print_r(removeParam($url2, "var2"));  // http://example.com/page?var1=123&var3=xyz