Php 如何基于查询字符串中的匹配使用setenif?

Php 如何基于查询字符串中的匹配使用setenif?,php,.htaccess,mod-rewrite,apache2,Php,.htaccess,Mod Rewrite,Apache2,我使用的URL是,比方说,example.com/subdir/index.php?foo=bar index.php包含以下内容: 我正在.htaccess中设置一个环境变量,如下所示: setenif请求\u URI(索引)TestEnv=Worked 这张照片“有效” 如果我将其更改为setenif Request_URI(bar)TestEnv=Worked,则不会 如何进行此操作?要匹配查询字符串,您需要mod\u rewrite规则,而不是mod\u setenv 将此代码放在roo

我使用的URL是,比方说,
example.com/subdir/index.php?foo=bar

index.php包含以下内容:

我正在.htaccess中设置一个环境变量,如下所示:

setenif请求\u URI(索引)TestEnv=Worked

这张照片“有效”

如果我将其更改为
setenif Request_URI(bar)TestEnv=Worked
,则不会


如何进行此操作?

要匹配查询字符串,您需要
mod\u rewrite
规则,而不是
mod\u setenv

将此代码放在root.htaccess中:

RewriteEngine On

RewriteCond %{QUERY_STRING} bar [NC]
RewriteRule ^ - [E=TestEnv:Worked]

让我更详细地解释一下我是如何应用它的

假设我们希望在请求以下URL时添加X-Robots-Tag标头:

这可以通过向.htaccess文件添加以下规则来实现:

RewriteEngine On
RewriteCond %{QUERY_STRING} /?whatever=true$ [NC]
RewriteRule ^ - [E=NOINDEXFOLLOW:true]
Header set X-Robots-Tag "noindex, follow" env=NOINDEXFOLLOW
另一种选择是:


您试图从查询参数中访问字符串,这将不起作用。查询部分根本不是
RequestURI
的一部分!文档中明确说明了这一点:该文档实际上明确指出,在哪里可以找到问题的答案:-)我读过该文档,但它与我的测试相冲突。无论如何,它并没有给我答案。显然我应该使用RewriteCond,但我不知道如何使用。看这里:这里指的是那里:如果你能解释一下发生了什么,那就太好了。[NC]表示不区分大小写,^-表示不更改url,只设置和环境变量,
NC
表示忽略大小写匹配。它将匹配上面示例中的条、条、条、条等。
SetEnvIfExpr "%{QUERY_STRING} =~ /bar/" TestEnv=Worked