如何根据查询字符串中的匹配项使用 SetEnvIf?

How can I use SetEnvIf based on matches in the query string?

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

index.php 包含这个:<?php echo getenv("testenvvar"); ?>

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

SetEnvIf Request_URI (index) TestEnv=Worked

这会打印 "Worked".

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

我该怎么做?

要匹配查询字符串,您需要 mod_rewrite 规则而不是 mod_setenv

将此代码放在根目录 .htaccess 中:

RewriteEngine On

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

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

假设我们要在请求以下 URL 时添加 X-Robots-Tag header: https://example.com/?whatever=true

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

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

另一种选择是 SetEnvIfExpr:

SetEnvIfExpr "%{QUERY_STRING} =~ /bar/" TestEnv=Worked

使用 SetEnvIfExpr 和 REDIRECT_NOINDEXFOLLOW 对我有用。

RewriteEngine On
SetEnvIfExpr "%{QUERY_STRING} =~ /bar/" NOINDEXFOLLOW
Header set X-Robots-Tag "noindex, follow" env=REDIRECT_NOINDEXFOLLOW