使用PHP检查AllowOverride值?

ndm*_*web 10 php apache .htaccess

无论如何使用PHP来检查值AllowOverride是否.htaccess会产生任何影响?

Pek*_*ica 7

我不知道干净,直接的方式来做到这一点.

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

例如,您可以设置一个标题(mod_headers虽然这有一个附加的依赖):

<FilesMatch "\.(php)$">
<IfModule mod_headers.c>
Header set htaccess_works "yes"
</IfModule>
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

然后从PHP发出请求,并检查响应头,例如使用curl's CURLOPT_HEADER.如果它们包含htaccess_works标题,则可以.

另一种非常糟糕但保证独立于特定Apache模块工作的方法是以编程方式将乱码写入.htaccess文件,然后生成如上所述的卷曲请求,并检查500状态代码.如果它抛出500,则解释.htaccess文件.但是如上所述,这很糟糕 - 如果可能的话,请改用header方法.

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

reg*_*ero 5

作为对@Pekka 回复的补充:

AllowOverride可以设置为NoneAll,但也可以设置为特定的术语列表: AuthConfigFileInfoIndexesLimitOptions。因此,例如,您可以被允许使用标头指令,但不能使用拒绝指令。

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

#AuthConfig
AuthName "Secret"
#FileInfo
ErrorDocument 404 index.php
#Indexes
DefaultIcon /icon/unknown.xbm 
#Limit
Allow From All
#Options
Options FollowSymLinks
Run Code Online (Sandbox Code Playgroud)

然后,如果您有 500 个错误注释行来检测哪些单词(部分)是禁止的。在删除所有禁止的指令之前,您将收到错误 500。当您知道允许的部分时,您必须检查文档以获取允许的指令的完整列表。

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

Deny From All
Run Code Online (Sandbox Code Playgroud)

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