【发布时间】:2025-12-13 23:30:02
【问题描述】:
有没有办法用PHP来检查AllowOverride的值,看看.htaccess会不会有什么影响?
【问题讨论】:
-
您是否可以通过 http 访问要在其中进行测试的文件夹?
-
我正在尝试从可通过 http 访问的 php 文件进行测试,是的。在网络根目录内。 (例如
example.com/test.php)
有没有办法用PHP来检查AllowOverride的值,看看.htaccess会不会有什么影响?
【问题讨论】:
example.com/test.php)
我不知道有一种干净、直接的方法可以做到这一点。
如果您对要检查的文件夹具有 http 访问权限,则可以在 .htaccess 文件中写入一些内容以触发某种输出。
例如,您可以设置一个标头(不过,这增加了对mod_headers 的依赖):
<FilesMatch "\.(php)$">
<IfModule mod_headers.c>
Header set htaccess_works "yes"
</IfModule>
</FilesMatch>
然后从 PHP 发出请求,并检查响应标头,例如使用curl 的CURLOPT_HEADER。如果它们包含 htaccess_works 标头,则可以使用。
另一种糟糕但保证独立于特定 Apache 模块工作的方法是以编程方式将乱码写入.htaccess 文件,然后像上面一样发出 curl 请求,并检查500 状态代码。如果它抛出 500,则 .htaccess 文件被解释。但如前所述,这很糟糕 - 如果可能,请改用 headers 方法。
【讨论】:
作为@Pekka 回复的补充:
AllowOverride 可以设置为 None 或 All,但也可以设置为特定的术语列表: AuthConfig、FileInfo、索引、限制、选项。因此,例如,您可以被允许使用 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。
【讨论】:
最简单的方法
在页面的第一行添加:show-error 通过浏览器加载域以触发 50 倍错误
另一种很糟糕但保证可以独立工作的方法 从特定的 Apache 模块以编程方式编写乱码 进入 .htaccess 文件,然后像上面一样发出 curl 请求,然后 检查 500 状态代码。如果抛出 500,则 .htaccess 文件 得到解释。但正如所说,这很糟糕 - 如果可能,请选择 而是使用 headers 方法。
【讨论】: