【问题标题】:Check AllowOverride value using PHP?使用 PHP 检查 AllowOverride 值?
【发布时间】:2025-12-13 23:30:02
【问题描述】:

有没有办法用PHP来检查AllowOverride的值,看看.htaccess会不会有什么影响?

【问题讨论】:

  • 您是否可以通过 http 访问要在其中进行测试的文件夹?
  • 我正在尝试从可通过 http 访问的 php 文件进行测试,是的。在网络根目录内。 (例如example.com/test.php

标签: php apache .htaccess


【解决方案1】:

我不知道有一种干净、直接的方法可以做到这一点。

如果您对要检查的文件夹具有 http 访问权限,则可以在 .htaccess 文件中写入一些内容以触发某种输出。

例如,您可以设置一个标头(不过,这增加了对mod_headers 的依赖):

<FilesMatch "\.(php)$">
<IfModule mod_headers.c>
Header set htaccess_works "yes"
</IfModule>
</FilesMatch>

然后从 PHP 发出请求,并检查响应标头,例如使用curlCURLOPT_HEADER。如果它们包含 htaccess_works 标头,则可以使用。

另一种糟糕但保证独立于特定 Apache 模块工作的方法是以编程方式将乱码写入.htaccess 文件,然后像上面一样发出 curl 请求,并检查500 状态代码。如果它抛出 500,则 .htaccess 文件被解释。但如前所述,这很糟糕 - 如果可能,请改用 headers 方法。

【讨论】:

  • 我做了一些与此类似的事情。我试图使用 htaccess(inc、bak 等)限制对某些文件类型的访问。我的解决方案通过对受限文件的 http:// 包装器执行了 file_get_contents。如果我取回内容,我知道 .htaccess 文件没有生效。如果我返回 null,我知道服务器正在执行拒绝覆盖。
【解决方案2】:

作为@Pekka 回复的补充:

AllowOverride 可以设置为 NoneAll,但也可以设置为特定的术语列表: AuthConfigFileInfo索引限制选项。因此,例如,您可以被允许使用 Header 指令,但不能使用 Deny。

因此,测试 AllowOverride 真正价值的一种方法是将其添加到您的 .htaccess 中:

#AuthConfig
AuthName "Secret"
#FileInfo
ErrorDocument 404 index.php
#Indexes
DefaultIcon /icon/unknown.xbm 
#Limit
Allow From All
#Options
Options FollowSymLinks

那么如果你有 500 条错误注释行来检测哪些单词(部分)是被禁止的。在您删除所有禁止指令之前,您将收到错误 500。当您知道允许的部分后,您必须查看documentation 以获取允许的说明的完整列表。

如果您没有任何错误,则您有 AllowOverride None 或 All。然后将拒绝/允许更改为:

Deny From All

如果您有 403 结果,则它是 AllowOverride All。

【讨论】:

    【解决方案3】:

    最简单的方法

    在页面的第一行添加:show-error 通过浏览器加载域以触发 50 倍错误

    另一种很糟糕但保证可以独立工作的方法 从特定的 Apache 模块以编程方式编写乱码 进入 .htaccess 文件,然后像上面一样发出 curl 请求,然后 检查 500 状态代码。如果抛出 500,则 .htaccess 文件 得到解释。但正如所说,这很糟糕 - 如果可能,请选择 而是使用 headers 方法。

    【讨论】: