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

时间:2015-07-10 13:56:32

标签: php .htaccess mod-rewrite apache2

我正在使用的网址是example.com/subdir/index.php?foo=bar

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

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

SetEnvIf Request_URI (index) TestEnv=Worked

打印“工作”。

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

我该怎么做?

4 个答案:

答案 0 :(得分:2)

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

将此代码放在root .htaccess中:

RewriteEngine On

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

答案 1 :(得分:2)

另一种选择是SetEnvIfExpr

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

答案 2 :(得分:1)

让我解释一下我如何应用它。

假设我们要在请求以下URL时添加X-Robots-Tag标头: 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

答案 3 :(得分:0)

使用 SetEnvIfExpr 和 REDIRECT_NOINDEXFOLLOW 对我有用。

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