argument=argument 时如何在 .htaccess 中设置规则?

How set rule in .htaccess when argument=argument?

例如:

RewriteCond %{QUERY_STRING} (?)argument=argument

但是:

RewriteCond %{QUERY_STRING} (?)argumentext=argumentext

我找到规则:

RewriteCond %{QUERY_STRING} (?)[a-zA-Z0-9_]=[a-zA-Z0-9_]

但是这条规则只能找到“=”和前后的随机文本,但我需要 when argument=value

示例:

IP - - [DATE] "GET /?value=value HTTP/1.1" 
IP - - [DATE] "GET /?random=random HTTP/1.1" 
IP - - [DATE] "GET /?qwerty=qwerty HTTP/1.1" 
IP - - [DATE] "GET /?randomvalues=randomvalues HTTP/1.1" 

当它们相等时需要规则

您可以将此规则与捕获组和 back-reference:

RewriteCond %{QUERY_STRING} ^([^=]+)=$
RewriteRule ^ - [G]

此处RewriteRule ^ - [G]仅用于测试

解释:

  • ^: 比赛开始
  • ([^=]+):匹配捕获组 #1
  • 中不是 = 的任何字符的 1+
  • =:匹配一个=
  • </code>:匹配与捕获组 #1 中相同的值</li> <li><code>$:结束
 "GET /?value=value HTTP/1.1" 
 "GET /?random=random HTTP/1.1" 
 "GET /?qwerty=qwerty HTTP/1.1" 
 "GET /?randomvalues=randomvalues HTTP/1.1"

您可以执行类似以下操作来匹配参数名称和值相同的 <something>=<something>

RewriteCond %{QUERY_STRING} (?:^|&)(\w+)=(?:$|&)

其中 </code> 是与 URL 参数名称匹配的内部反向引用。</p> <p>此 <code>name=name 对可以出现在查询字符串中的任何位置,以及其他 URL 参数。但只有整个参数名称会匹配。