2015-07-10 101 views
1

我使用的是URL,让我们说,example.com/subdir/index.php?foo=bar如何根据查询字符串中的匹配使用SetEnvIf?

index.php文件包含此:​​3210

我设置的环境变量在.htaccess像这样:

SetEnvIf Request_URI (index) TestEnv=Worked

这打印“工作”。如果我将其更改为SetEnvIf Request_URI (bar) TestEnv=Worked,则不会。

我该怎么做?

+0

您试图从查询参数访问一个字符串,这是行不通的。查询部分仅仅是'RequestURI'的一部分!这在文档中有明确的说明:http://httpd.apache.org/docs/current/mod/mod_setenvif.html#setenvif文档实际上指出了具体的问题,你可以在这里找到你的问题的答案:-) – arkascha

+2

I我会阅读那些文档,但它与我的测试相冲突。无论如何,它并没有给我答案。显然我应该使用RewriteCond,但我不知道如何。 –

+0

请参阅:http://stackoverflow.com/questions/19362746/rewritecond-with-setenv它指的是:https://turboflash.wordpress.com/2010/05/27/apache-environment-variables-visibility- with-setenv-setenvif-and-rewriterule-directives/ – arkascha

回答

1

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

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

RewriteEngine On 

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

如果你解释发生了什么,它会很好。 [NC]表示不区分大小写, ^ - 表示不改变url,只是设置和环境变量, –

+0

'NC'用于忽略大小写匹配。在上面的例子中,它将匹配bar,bar,BAR,baR等。 – anubhava

相关问题