Php 正则表达式在一个查询参数上精确匹配一个单词n次,以便与rewritecond.htaccess文件一起使用

Php 正则表达式在一个查询参数上精确匹配一个单词n次,以便与rewritecond.htaccess文件一起使用,php,regex,wordpress,.htaccess,mod-rewrite,Php,Regex,Wordpress,.htaccess,Mod Rewrite,我想要一些帮助。我想匹配wordpress网站中htaccess文件中http引用程序的条件。我想将查询参数从“referer”传递到请求uri 我正在尝试使用mod_rewrite函数来实现这一点 RewriteCond %{HTTP_REFERER} ^((?!menu=a.*\&menu=a).)*$ RewriteRule ^.*$ %{REQUEST_URI} [L,QSA] 我想匹配以下内容 http://example.co.uk?menu=a&menu=a f

我想要一些帮助。我想匹配wordpress网站中htaccess文件中http引用程序的条件。我想将查询参数从“referer”传递到请求uri

我正在尝试使用mod_rewrite函数来实现这一点

RewriteCond %{HTTP_REFERER} ^((?!menu=a.*\&menu=a).)*$ 
RewriteRule ^.*$ %{REQUEST_URI} [L,QSA]
我想匹配以下内容

http://example.co.uk?menu=a&menu=a false
http://couldbeanything.co.uk?couldbeanything=b&menu=a true
http://example.co.uk?tile=b&menu=a true
http://example.co.uk/?menu=a true
http://example.co.uk/?menu false
http://example.co.uk/testing123/?tile=a&menu=a true
http://example.co.uk false
http://example.co.uk/?p=12 false
http://example.co.uk/?p=12&menu=a&menu=a false
http://example.co.uk/?p=12&menu=a&tile=b&menu=a false
我希望能够在查询参数出现一次且仅出现一次时进行匹配。我不想在零次出现时匹配。我不想匹配两个或多个事件

我试过了

^((?!menu=a.*\&menu=a).)*$
.*?.*(menu=){1}
^(?!.*menu=.*menu=).+$
我试过了

^((?!menu=a.*\&menu=a).)*$
.*?.*(menu=){1}
^(?!.*menu=.*menu=).+$
我试过了

^((?!menu=a.*\&menu=a).)*$
.*?.*(menu=){1}
^(?!.*menu=.*menu=).+$
我试过了

^(?!(.*menu=){1})(.*menu=){1}.*$
以上这些都不是我所需要的。我试过很多不同的正则表达式

我想我可以尝试反向匹配我在另一篇文章中看到的匹配,然后在htaccess中以某种方式操纵它,所以我尝试了这个,但也无法正确匹配

^((?!menu).)*$
我觉得我可能从错误的角度来处理这个问题,这可能不是regex的目的

也许我可以数一数
menu=somevariable
然后从htaccess文件中操作它?我找不到关于谷歌搜索如何做到这一点的信息

任何关于如何解决这一问题的意见都将不胜感激。我不介意它是否在regex中,只要它在htaccess文件中是可行的

谢谢你的意见

找到正确的正则表达式后的进一步更新

我已经尝试过了,但是由于查询被反复添加到请求uri中,我从站点得到了不稳定的行为

RewriteCond %{REQUEST_URI} ^(?!.*(menu=)).*$
RewriteCond %{HTTP_REFERER} ^(?!.*\menu=\b.*\bmenu=\b).*\bmenu=\b.*$
RewriteRule ^.*$ %{REQUEST_URI}?menu=a [QSA]

在谷歌搜索之后,我发现google chrome从请求中删除了referer标签,因此如果不让客户端使用另一个不可执行的浏览器,就不可能可靠地使用上述方法

我使用了另一种方法,从slug中获取url参数,然后存储一个cookie,并使用cookie进行重定向

获取复制/粘贴或wp创建slug的代码

function get_slug_param( $slugname ) {
// Initialize the slug param value
$slug = null;

$queryURL = parse_url( html_entity_decode( esc_url( add_query_arg( $arr_params ) ) ) );
parse_str( $queryURL['query'], $getVar );
$slug = $getVar[$slugname];

return $slug;
}

设置cookie的代码

$cookieName = 'whitechocolate';
$cookieValue = '2';
unset( $_COOKIE[$cookieName]);
setcookie($cookieName, $cookieValue, time() + (86400 * 30), '/' ); // set to a day
执行从cookie重定向的代码

if(isset($_COOKIE[$cookieName])) {
    //echo "dont use echo to output html before php otherwise parsing error will php occur";
    //use the value from the cookie to add to the query arg
    $changeurl = add_query_arg($cookieName, $_COOKIE[$cookieName], get_permalink());
    header('Location: '.$changeurl);
}

在谷歌搜索之后,我发现google chrome从请求中删除了referer标签,因此如果不让客户端使用另一个不可执行的浏览器,就不可能可靠地使用上述方法

我使用了另一种方法,从slug中获取url参数,然后存储一个cookie,并使用cookie进行重定向

获取复制/粘贴或wp创建slug的代码

function get_slug_param( $slugname ) {
// Initialize the slug param value
$slug = null;

$queryURL = parse_url( html_entity_decode( esc_url( add_query_arg( $arr_params ) ) ) );
parse_str( $queryURL['query'], $getVar );
$slug = $getVar[$slugname];

return $slug;
}

设置cookie的代码

$cookieName = 'whitechocolate';
$cookieValue = '2';
unset( $_COOKIE[$cookieName]);
setcookie($cookieName, $cookieValue, time() + (86400 * 30), '/' ); // set to a day
执行从cookie重定向的代码

if(isset($_COOKIE[$cookieName])) {
    //echo "dont use echo to output html before php otherwise parsing error will php occur";
    //use the value from the cookie to add to the query arg
    $changeurl = add_query_arg($cookieName, $_COOKIE[$cookieName], get_permalink());
    header('Location: '.$changeurl);
}