如何根据查询字符串中的匹配项使用 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
我使用的 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