已忽略虚拟主机中设置的php_flag


php_flag set in virtual host ignored

对于站点上的一组特定路径,我需要将enable_post_data_reading设置为off,但我很难使其正常工作。情况如下:

Apache 2.2.22,PHP 5.4.34

正在尝试使用in指令来设置标志。

使用了URL重写(这是一个Drupal网站),所以每个目录的htaccess文件不起作用。

如果我在php.ini中将enable_post_data_reading设置为"off",那么post数据将按预期处理,并且特定页面可以工作,但它会破坏网站的其余部分。然而,我至少向自己证明了这种设置是可行的。

如果我在指令中设置了一个测试环境变量,它在预期的页面上是可见的,因此匹配正确。

但是,如果我在指令中将enable_post_data_reading设置为"off",它将被忽略。

类似地,如果我在php.ini中将它设置为"on",然后在虚拟主机中将它设置成"off",它就会保持打开状态

看起来,尽管这项建设效果良好:

<VirtualHost 192.169.0.1:80>
   # Virtual host name, docroot, etc.
   <Location /apply/>
      SetEnv foo bar
   </Location>
</VirtualHost>

如果我这样做:

<VirtualHost 192.169.0.1:80>
   # Virtual host name, docroot, etc.
   <Location /apply/>
      php_flag enable_post_data_reading on
   </Location>
</VirtualHost>

php_flag指令将被忽略。

那么,我做错了什么?有没有其他地方可以让我树立起这样的旗帜?

提前感谢。。。

好的,所以我们做了大量的测试。当URL被重写时,Location指令似乎无法正常工作,因此没有设置PHP标志。

然而,我们发现了一个解决方案:

  • 将虚拟主机的Location指令设置为在文件(例如/apply.php)上触发,而不是在路径上触发
  • 在顶部web目录中创建一个指向index.php的符号链接,使用您为Location使用的任何名称
  • 在将所有内容重定向到index.php的标准Drupal规则之前,在.htaccess文件中添加一个新的rewriteRule,这样,所有需要受php标志影响的路径都会被重写到符号链接

这似乎正是我们需要的:设置了PHP标志,Drupal正常处理请求。相当间接,但它比任何其他可能的解决方案都要好。