如何使用 AllowOverride 指令来允许 .htaccess 文件覆盖 php_value (Apache2)

Posted

技术标签:

【中文标题】如何使用 AllowOverride 指令来允许 .htaccess 文件覆盖 php_value (Apache2)【英文标题】:How do I use the AllowOverride directive to permit .htaccess files to override php_value (Apache2) 【发布时间】:2021-09-21 16:34:54 【问题描述】:

我想在每个<VirtualHost> 的基础上,使用每个主机.htaccess 文件设置三个不同的php_value 参数的值。大概为了做到这一点,我需要在每个 <VirtualHost> 配置中放置一个 AllowOverride 指令,以允许覆盖这些值;我不想简单地使用AllowOverride All,因为这似乎过于宽容而且有点矫枉过正。

问题似乎是php_value不是Apache2指令,也不是memory_limitmax_upload_filesizemax_post_size等具体值的名称;然而 AllowOverride 似乎只接受 Apache2 指令的一个子集作为它的参数,以及像 AllOption 等的东西。

谁能指出我正确的方向?我知道我可以简单地使用 php.ini 或在 <VirtualHost> 配置本身中包含 php_value 定义,但我真的很想先通过 .htaccess 文件了解它是如何完成的。

【问题讨论】:

【参考方案1】:

根据"How to change configuration settings" documentation,需要AllowOverride Options 才能使用php_value 指令。这当然隐含在AllowOverride All 中。您不要使用 php_value 作为 AllowOverride 的参数,php_value 是 mod_php 提供的指令,如果您无法使用它,您可能没有将 PHP 作为 Apache 模块运行。如果是这样,那么您需要在每个站点上使用 other methods of customizing the configuration。

文档中的配置示例是一个很好的起点。第一步是验证您正在运行 mod_php。之后,如果您为虚拟主机适当地设置了AllowOverrides,您应该能够简单地将php_value 声明添加到您的.htaccess 文件中。例如,我刚刚测试了将这一行添加到 .htaccess 文件中:

php_value arg_separator.input &|,

结果:

【讨论】:

谢谢,我确认 php7_module 已加载并且您的解决方案运行良好。我实际上不会继续为此目的使用 .htaccess 文件,但我很高兴我发现了它的工作原理!

以上是关于如何使用 AllowOverride 指令来允许 .htaccess 文件覆盖 php_value (Apache2)的主要内容,如果未能解决你的问题,请参考以下文章

httpd.conf AllowOverride All

.htaccess 详解

ctfhub技能树—文件上传—.htaccess

如何添加Apache服务器用户验证AllowOverride AuthConfig

技术干货 | Apache的.htaccess利用技巧

htaccess分布式配置文件常用写法