在虚拟主机中设置的php_flag被忽略

时间:2014-11-05 09:23:13

标签: php apache virtualhost

我需要将enable_post_data_reading设置为关闭网站上的一组特定路径,并且无法使其正常工作。情况如下:

Apache 2.2.22,PHP 5.4.34

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

使用了URL重写(它是Drupal站点),因此每个目录的htaccess文件将无效。

如果我在php.ini中将enable_post_data_reading设置为“off”,则会按预期处理发布数据,并且特定页面可以正常工作,但会破坏网站的其余部分。但是,我至少向自己证明了这个设置是可行的。

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

但是,如果我在指令中将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指令。

那么,我做错了什么?还有其他地方我可以设置有效的旗帜吗?

提前致谢...

1 个答案:

答案 0 :(得分:1)

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

然而,我们发现了一种解决方法:

  • 将虚拟主机的位置指令设置为触发文件(例如/apply.php)而不是路径。
  • 在顶部网络目录中创建一个符号链接到index.php,其中包含您用于该位置的任何名称。
  • 在将所有内容重定向到index.php的标准Drupal规则之前,将新的rewriteRule添加到.htaccess文件中,以便将需要受PHP标志影响的路径的所有内容重写为符号链接。

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